JavaScript如何通过嵌套数组内的指定值过滤外层数组对象
嵌套数组筛选的问题原因
Array.filter()永远返回数组类型,就算没有匹配到任何元素也会返回空数组[],而JavaScript中空数组属于真值,会被外层filter判定为符合筛选条件,因此你的代码会返回全部order对象,无法得到预期结果。
修正方案
判断子数组是否包含符合条件的元素,应使用Array.some()方法,该方法会直接返回布尔值:存在至少一个符合条件的元素时返回true,所有元素都不符合条件时返回false,刚好适配外层filter的判断逻辑。
正确实现代码如下:
const filteredOrders = orders && orders.filter((order) => { return order.items.some((item) => item.itemId === "abc"); }); // 也可以用可选链简化前置非空判断,效果一致 // const filteredOrders = orders?.filter(order => order.items.some(item => item.itemId === "abc"))
执行后得到的结果和你给出的预期返回完全匹配。
内容的提问来源于stack exchange,提问作者Ruham
相关产品推荐
相关产品推荐

