我正在尝试过滤数组以检查所有嵌套对象(我的项目包含其他项目)的特定值是否与我的条件匹配。
以下工作正常,但是我需要迭代该过程,直到找到所有匹配的元素。
// My filter
var itemsNumber = e.items.filter(function(superhero) {
return superhero.group && superhero.group.items && superhero.group.items[0] && superhero.group.items[0].id === "1517"
/* I basically need to iterate the following process:
|| superhero.group && superhero.group.items && superhero.group.items[1] && superhero.group.items[1].id === "1517"
|| superhero.group && superhero.group.items && superhero.group.items[2] && superhero.group.items[2].id === "1517"
|| superhero.group && superhero.group.items && superhero.group.items[3] && superhero.group.items[3].id === "1517"
|| superhero.group && superhero.group.items && superhero.group.items[4] && superhero.group.items[4].id === "1517"
... And so on.
*/
});
console.log(itemsNumber.length);
提前致谢。
您正在寻找的some
方法:
return superhero.group &&
superhero.group.items &&
superhero.group.items.some(({id}) => id === "1517");
或者如果您在ES5中需要它:
return superhero.group &&
superhero.group.items &&
superhero.group.items.some(function(item) {
return item.id === "1517";
});
some
为数组中的每个条目调用一次其回调,并true
在回调第一次返回true值时返回,或者false
如果回调从不返回true值(包括数组中根本没有条目),则返回。也就是说,它检查数组中的“某些”(实际上是“任意”)项是否与回调表示的谓词匹配。
这是一个示例(在ES2015 +中),当条件为真和条件为假时:
function check(superhero) {
return superhero.group &&
superhero.group.items &&
superhero.group.items.some(({id}) => id === "1517");
}
function test(superhero, expect) {
const result = check(superhero);
console.log(`Checking ${JSON.stringify(superhero)}: ${result} <= ${!result === !expect ? "OK" : "ERROR"}`);
}
test({group: {items: [{id: "1"}, {id: "1517"}, {id: "9999"}]}}, true);
test({group: {items: [{id: "1"}, {id: "2"}, {id: "3"}]}}, false);
¹“真实值”-“真实值”是任何不“虚假”的值。甲falsy值是一个值,该值的计算结果为false
作为一个条件(如使用时if (x)
)。该falsy值0
,""
,null
,undefined
,NaN
,当然,false
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句