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

在 JavaScript 中对对象数组内的对象数组进行过滤

在 JavaScript 中对对象数组内的对象数组进行过滤

BIG阳 2023-07-29 14:53:04
我想按类别获取 Main 的数组[  {    "@id": "/api/main/7648",    "@type": "Main",    category: [{      name: "laboriosam"    }]  },  {    "@id": "/api/main/7647",    "@type": "Main",    category: [{        name: "foo"      },      {        name: "bar"      }    ]  }]所以我尝试:console.log([...this.state.mains].filter(main => main.category.filter(category => category.name == "foo")))但它返回了我的一切,我不明白为什么?
查看完整描述

2 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

使用Array.prototype.some,您可以确定该值是否存在。


使用Array.filter函数,它仅过滤true值,因此需要在回调时返回布尔值。


const input = [{

    "@id": "/api/main/7648",

    "@type": "Main",

    category: [{

      name: "laboriosam"

    }]

  },

  {

    "@id": "/api/main/7647",

    "@type": "Main",

    category: [{

        name: "foo"

      },

      {

        name: "bar"

      }

    ]

  }

];


console.log(input.filter(main => main.category.some(category => category.name == "foo")))


查看完整回答
反对 回复 2023-07-29
?
九州编程

TA贡献1785条经验 获得超4个赞

我觉得你的问题真的很难理解。如果你只想要 @type = "Main" 的对象,你可以这样做

this.state.mains.filter(x => x["@type"] === "Main");

如果您想过滤掉那些没有特定类别的人,您可以添加另一个过滤器,如下所示:

this.state.mains
   .filter(x => x["@type"] === "Main")
   .filter(x => x.category.findIndex(c => c.name === "foo") !== -1);

显然,在大数组的情况下,您还可以将两项检查放入一个过滤器中,但这可能不那么可读。

另请注意,这[...this.state.mains].filter(...)是多余的,因为.filter()已经返回了一个新数组。


查看完整回答
反对 回复 2023-07-29
  • 2 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

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