过滤子数组orderedItems时如何同时过滤外层主数组对象?
你可以在现有map处理逻辑后链式调用filter方法,过滤掉orderedItems为空的外层对象即可,完整实现如下:
const data = [ { id: 6, orderedItems: [ { name: "Product A", vendor: 2 }, { name: "Product B", vendor: 2 }, { name: "Product B", vendor: 2 } ] }, { id: 5, orderedItems: [ { name: "Product Aaa", vendor: 1 }, { name: "Product Bbb", vendor: 1 }, { name: "Product Ccc", vendor: 2 } ] } ]; const userId = 1; const filteredData = data.map(({ id, orderedItems }) => { return { id: id, orderedItems: orderedItems.filter(({ vendor }) => vendor == userId), }; // 新增外层过滤,仅保留orderedItems不为空的对象 }).filter(item => item.orderedItems.length > 0); console.log(JSON.stringify(filteredData, null, 2));
如果处理的数据量较大,也可以用reduce方法一次性完成内层、外层过滤,只遍历一次数组,性能更优:
const filteredData = data.reduce((result, { id, orderedItems }) => { const filteredItems = orderedItems.filter(({ vendor }) => vendor == userId); if (filteredItems.length) { result.push({ id, orderedItems: filteredItems }); } return result; }, []);
内容的提问来源于stack exchange,提问作者Mohammad Khan
相关产品推荐
相关产品推荐

