我有一个嵌套数组对象
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,里面的 ref_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);
}
}
});
这是否可以以更好和优化的方式完成,因为项目列表可能非常大?
答案 0 :(得分:0)
@alia, I would suggest you use find method on product nested array object. Check for below code:
useEffect(() => {
getFilteredCategories()
}, []);
const filteredCategories = ['B123'];
let filteredProducts = [];
const getFilteredCategories = async () => {
filteredCategories.map((id, index) => {
const participants = product.find(o => o.ref_id === id);
filteredProducts.push(participants)
return filteredProducts;
});
console.log('filteredProducts', filteredProducts)
}