我想按类别获取 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")))
九州编程
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()
已经返回了一个新数组。
添加回答
举报
0/150
提交
取消