检查数组中的任何对象是否包含另一个数组中列出的属性

时间:2017-08-28 18:45:25

标签: javascript arrays ecmascript-6

我已经尝试了一些解决方案,并且已经在这里看了一下,但似乎无法实现这一点。

我有2个数组,想要检查数组中的任何项是否包含另一个数组中的任何字符串。

const stepsShown = ["ref2", "ref7"];
const items = [
{ name: "item1", element: "ref1"},
{ name: "item2", element: "ref2"}
];
const refsExist = items.some((r) =>{stepsShown.indexOf(r.element);});

在此示例中,我希望refsExisttrue

我觉得我的语法有点混乱!有人可以帮忙吗? :)

2 个答案:

答案 0 :(得分:3)

你几乎没有,除了你需要测试一个非-1值,你的箭头函数不应该有括号。

如果您的箭头功能由单个表达式组成,则您不需要括号:

items.some(r=>stepsShown.indexOf(r.element)!=-1);

如果箭头函数包含语句或多个表达式,则需要大括号。使用大括号时,必须包含明确的return语句。

items.some(r=>{
    for(some;thing;) { ... }
    return otherThing;
});

您可以简单地使用.indexOf(..)!=-1

,而不是依赖于不太可读的includes测试。
items.some(r=>stepsShown.includes(r.element));

答案 1 :(得分:0)

您可以找到一个元素,然后检查它是否未定义

const stepsShown = ["ref2", "ref7"];
const items = [
{ name: "item1", element: "ref1"},
{ name: "item2", element: "ref2"}
];
const refsExist = items.find((r) =>{    
    return stepsShown.indexOf(r.element)>-1;
});

console.log(refsExist !== undefined);