Javascript 查找if对象';s数组具有使用Lodash的另一个数组中的元素
有一系列产品,每个产品的结构如下:Javascript 查找if对象';s数组具有使用Lodash的另一个数组中的元素,javascript,arrays,lodash,Javascript,Arrays,Lodash,有一系列产品,每个产品的结构如下: { id: 1, name: "product 1", materials: [ { id: 1, name: "material 1" }, { id: 2, name: "material 2" }, { id: 3, name: "material 3" } ] } 每个产品都有一个包含不同数量材料的阵列 还有一个材质
{
id: 1,
name: "product 1",
materials: [
{
id: 1,
name: "material 1"
},
{
id: 2,
name: "material 2"
},
{
id: 3,
name: "material 3"
}
]
}
每个产品都有一个包含不同数量材料的阵列
还有一个材质ID数组,例如[1,4,7,2,5]
如何过滤产品阵列以仅保留产品,其中物料具有物料ID,而这些ID位于物料ID阵列中?请尝试
products.filter(p=> p.materials.some(m=> materialsIds.includes(m.id)));
让materialsIds=[1,4,7,2,5];
让产品=[
{id:1,名称:“产品1”,材料:[{id:1,名称:“材料1”},{id:2,名称:“材料2”},{id:3,名称:“材料3”}]},
{id:2,名称:“产品2”,材料:[{id:2,名称:“材料2”}]},
{id:3,名称:“产品3”,材料:[{id:3,名称:“材料3”}],
]
设r=products.filter(p=>p.materials.some(m=>materialsIds.includes(m.id));
log('filteredproducts-id',r.map(p=>p.id));
log('filteredproducts',JSON.stringify(r))
您可以使用filter()
some()
和includes()
- 在产品的主阵列上使用
filter()
- 然后在对象的
材质上使用
李>some()
- 检查
(物料id)是否包括物料的mats
id
- 检查
let arr=[{id:1,名称:“产品1”,材料:[{id:1,名称:“材料1”},{id:2,名称:“材料2”},{id:3,名称:“材料3”},{id:2,名称:“产品2”,材料:[{id:11,名称:“材料11”},{id:22,名称:“材料22”},{id:33,名称:“材料33”}
]
设mats=[1,5,6];
设res=arr.filter(x=>x.materials.some(z=>mats.includes(z.id));
console.log(res)
您可以执行以下操作:
import {intersection} from 'lodash'
const products = [...]
const materialIds = [1,4,7,2,5]
// some function use es5+
const targetProducts = products.filter(p => intersection(p.materials.map(m => m.id), materialIds).length)
// use lodash only import {filter, map, intersection} from 'lodash'
const targetProducts = filter(products, p => intersection(map(p.materials, 'id'), materialIds).length)
const产品=[
{
id:1,
名称:“产品1”,
材料:[
{
id:1,
名称:“材料1”
},
{
id:7,
名称:“材料7”
},
{
id:5,
名称:“材料5”
}
]
},
{
id:2,
名称:‘产品2’,
材料:[
{
id:1,
名称:“材料1”
},
{
id:2,
名称:“材料2”
},
{
id:3,
名称:“材料3”
}
]
}
];
常数材料=[3,4];
console.log(
products.filter(产品=>{
对于(设i=0;i );代码>请显示您已尝试的内容。这里的目标是让其他人帮助修复您的代码,而不是为您编写所有代码。这不是一个复杂的过滤器,需要创建。是否有理由首先将对象映射到id
字段的数组?map()是redundant@ziggywiggy不,我的方法不好。我修好了