为了账号安全,请及时绑定邮箱和手机立即绑定

过滤 Javascript 数组以检查所有嵌套对象中的特定值

过滤 Javascript 数组以检查所有嵌套对象中的特定值

紫衣仙女 2021-12-02 16:50:23
我正在尝试过滤一个数组,以检查所有嵌套对象(我有包含其他项目的项目)的特定值是否符合我的条件。以下工作正常,但我需要迭代该过程,直到找到所有匹配的元素。// My filtervar 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);提前致谢。
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

您正在寻找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在回调第一次返回真值时返回,或者false在回调从未返回真值时返回(包括数组中根本没有条目)。也就是说,它检查数组中的“某些”(实际上是“任何”)项是否与回调表示的谓词匹配。


这是条件为真和为假时的示例(在 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))。虚假值是0, "", null, undefined, NaN, 当然还有false。


查看完整回答
反对 回复 2021-12-02
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信