Javascript检查对象数组中是否存在字符串

时间:2019-02-12 23:03:20

标签: javascript arrays reactjs object ecmascript-6

程序中有两个数组,一个数组包含用作键的字符串列表,另一个数组也包含键的对象。

let classKeys = ['math', 'robotics'];
let classesInList = [{key : "WIHUGDYVWJ", className : 'math'},{key : "qwljdhkuqwdnqwdk", className : 'english'},{key : "likubqwd", className : 'robotics'},];

仅当键(作为className属性)存在于classKeys中时,我才需要返回另一个包含classesInList之类的对象的数组

例如,在这种情况下,我需要对照classesInList检查classKeys并创建一个包含两个项目的数组:

[{key : "WIHUGDYVWJ", className : 'math'},{key : "likubqwd", className : 'robotics'}]

由于英语不在classKeys中,因此将其从classesInList中删除。 我该怎么办?

侧面注意:我使用的是react native,因此可以访问es6属性和函数。

在这种意义上,我完全陷入困境。不管这看起来多么简单,我都找不到答案。

5 个答案:

答案 0 :(得分:2)

只需使用Array.prototype.filter并将其与Array.prototype.includes结合使用。您要做的是过滤accept()对象数组,只选择classesInList数组中存在className值的对象。

classKeys

答案 1 :(得分:1)

您可以使用filter数组方法并检查元素的className是否在classKeys数组中:

let classKeys = ["math", "robotics"];
let classesInList = [
  { key: "WIHUGDYVWJ", className: "math" },
  { key: "qwljdhkuqwdnqwdk", className: "english" },
  { key: "likubqwd", className: "robotics" }
];

let result = classesInList.filter(element => {
  return classKeys.indexOf(element.className) !== -1;
});

console.log(result);

答案 2 :(得分:0)

使用filter将过滤您的数组,使用some来获取某些值是否符合您的条件,最后使用includes来检查该值是否包含在classKeys中

let classKeys = ['math', 'robotics'];
let classesInList = [{key : "WIHUGDYVWJ", className : 'math'},{key : "qwljdhkuqwdnqwdk", className : 'english'},{key : "likubqwd", className : 'robotics'},];


const result = classesInList
               .filter(c => 
                  Object.values(c).some(val => 
                                        classKeys.includes(val)
                  )
                );

console.log(result);

答案 3 :(得分:0)

Array.prototype.filterArray.prototype.includes使用解构:

let classKeys = ['math', 'robotics'];
let classesInList = [{key : "WIHUGDYVWJ", className : 'math'},{key : "qwljdhkuqwdnqwdk", className : 'english'},{key : "likubqwd", className : 'robotics'}];

let filtered = classesInList.filter(({ className }) => classKeys.includes(className));

console.log(filtered);

答案 4 :(得分:0)

您可以在ES6中使用filterincludes和对象分解来完成此操作:

const classKeys = ['math', 'robotics'];
const classesInList = [{key : "WIHUGDYVWJ", className : 'math'},{key : "qwljdhkuqwdnqwdk", className : 'english'},{key : "likubqwd", className : 'robotics'},];

const result = classesInList.filter(({ className }) => classKeys.includes(className));

console.log(result);