程序中有两个数组,一个数组包含用作键的字符串列表,另一个数组也包含键的对象。
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属性和函数。
在这种意义上,我完全陷入困境。不管这看起来多么简单,我都找不到答案。
答案 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.filter
和Array.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中使用filter
,includes
和对象分解来完成此操作:
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);