【发布时间】:2021-06-28 10:40:31
【问题描述】:
我有一个嵌套数组对象
const product = [{
ref_id: 'B123',
items: [
{
name: 'Brush',
ref_id: 'M1'
},
{
name: 'Paste',
ref_id: 'M2'
}
]
},
{
ref_id: 'B124',
items: [
{
name: 'Apple',
ref_id: 'M9'
},
{
name: 'Orange',
ref_id: 'M3'
}
]
},
{
ref_id: 'B113',
items: [
{
name: 'Maggi',
ref_id: 'M7'
},
{
name: 'Wai Wai',
ref_id: 'M12'
}
]
}
]
外部 ref_id 是类别 id,内部是产品 id。现在,我有两个数组 - 一个的值为类别的 ref_id,另一个为产品的 ref_id。
const filteredCategories = ['B123'];
const filteredItems = ['M2', 'M9', 'M7']
我想过滤掉所有属于filteredCategories ref_id 和filteredItems ref_id 的项目,这些项目可以是任何其他类别的一部分。此外,结果不应包含重复项。
我的解决方案
let filteredProducts = [];
products.forEach(item => {
if(_.includes(filteredCategories, item.ref_id)) {
filteredProducts.push(...item.items);
} else {
const filterProductItems = _.filter(item.items, (productItem)=> _.includes(filteredItems, productItem.ref_id));
if(filterProductItems) {
filteredProducts.push(...filterProductItems);
}
}
});
由于项目列表可能非常大,这是否可以以更好和优化的方式完成?
【问题讨论】:
-
我觉得这个问题更适合codereview.stackexchange.com
标签: javascript lodash