携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情
题目描述
给你一个数组 items ,其中 items[i] = [typei, colori, namei] ,描述第 i 件物品的类型、颜色以及名称。
另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。
如果第 i 件物品能满足下述条件之一,则认为该物品与给定的检索规则 匹配 :
ruleKey == "type" 且 ruleValue == typei 。
ruleKey == "color" 且 ruleValue == colori 。
ruleKey == "name" 且 ruleValue == namei 。
统计并返回 匹配检索规则的物品数量 。
来源:力扣(LeetCode)
- 示例 1
输入:items = [["phone","blue","pixel"],["computer","silver","lenovo"],["phone","gold","iphone"]], ruleKey = "color", ruleValue = "silver"
输出:1
解释:只有一件物品匹配检索规则,这件物品是 ["computer","silver","lenovo"] 。
- 示例 2
输入:items = [["phone","blue","pixel"],["computer","silver","phone"],["phone","gold","iphone"]], ruleKey = "type", ruleValue = "phone"
输出:2
解释:只有两件物品匹配检索规则,这两件物品分别是 ["phone","blue","pixel"] 和 ["phone","gold","iphone"] 。注意,["computer","silver","phone"] 未匹配检索规则。
思路分析
据题意可知,题目给出的数组是一个二维数组,二维数组里面的数组是由三个字段组成,这三个字段描述着一件物品的类型、颜色和名称,可这样表示第i件物品:items[i] = [typei, colori, namei];再给出两个字符串ruleKey 和 ruleValue,根据现有的检索规则来统计符合的物品数量。
首先,因为ruleKey是固定的三个字段:"type"、"color"和"name",可以根据它来做一个下标字典,根据字段找出下标;循环items二维数组,根据ruleKey字段结合下标字典可以取出二维数组中的每一项对应下标的值。这样取出每一项的值后,与ruleValue相比对,若是相同就返回当前的循环项,直至循环结束,最后计算整个数组的长度就可以了。
AC代码
function solution(items, ruleKey, ruleValue) {
const typeOcj = {
type: 0,
color: 1,
name: 2
}
let result = items.filter( el => {
return el[typeOcj[ruleKey]] === ruleValue
});
console.log(result.length);
}
let items = [["phone","blue","pixel"],["computer","silver","lenovo"],["phone","silver","iphone"]];
let ruleKey = "color";
let ruleValue = "silver";
solution(items, ruleKey, ruleValue);