Javascript 如果对象包含另一个数组中存在值的属性,则筛选对象数组
我有以下对象数组Javascript 如果对象包含另一个数组中存在值的属性,则筛选对象数组,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有以下对象数组 const abc = [ { sku: 1, features: ["Slim"], fields: [ { label: "Material", value: "Material1" }, { label: "Type", value: "Type1" }, ] }, { sku: 2, features
const abc = [
{
sku: 1,
features: ["Slim"],
fields: [
{ label: "Material", value: "Material1" },
{ label: "Type", value: "Type1" },
]
},
{
sku: 2,
features: ["Cotton"],
fields: [
{ label: "Material", value: "Material2" },
{ label: "Type", value: "Type1" },
]
},
{
sku: 3,
features: ["Cotton"],
fields: [
{ label: "Material", value: "Material3" },
{ label: "Type", value: "Type2" },
]
}
];
我只想过滤那些其特征和字段值在本文档中存在的对象
const fieldsArr = ["Material1", "Material2", "Type1", "Slim"]
预期产量为
let output = [
{
sku: 1,
features: ["Slim"],
fields: [
{ label: "Material", value: "Material1" },
{ label: "Type", value: "Type1" },
]
},
{
sku: 2,
features: ["Cotton"],
fields: [
{ label: "Material", value: "Material2" },
{ label: "Type", value: "Type1" },
]
},
]
我这样解决了特征部分
abc.forEach(e => {
if (e.features.some(v => fieldsArr.indexOf(v) !== -1)) {
output.push(e);
}
});
但是我在过滤字段部分时遇到了问题。
是否有一种方法可以根据上述条件以优化的方式筛选对象。您还需要迭代嵌套数组
const
abc=[{sku:1,特征:[“细长”],字段:[{label:“材料”,值:“材料1”},{label:“类型”,值:“类型1”}},{sku:2,特征:[“棉花”],字段:[{label:“材料”,值:“材料2”},{label:“类型”,值:“类型1”},{sku:3,特征:[“棉花”],字段:[{label:“材料”,值:“材料3”},{label:“类型”,值:“Type2”}]}],字段R=[“Material1”、“Material2”、“Type1”、“Slim”],
结果=abc.filter({features,fields})=>
一些(v=>fieldsArr.includes(v))||
fields.some({value})=>fieldsArr.includes(value))
);
控制台日志(结果)代码>
。作为控制台包装{max height:100%!important;top:0;}
使用过滤器,并使用FieldsRR检查功能
和字段
(值)的每项组合值
const abc=[
{
sku:1,
特点:[“苗条”],
字段:[
{标签:“材料”,值:“材料1”},
{标签:“类型”,值:“类型1”}
]
},
{
sku:2,
特点:[“棉质”],
字段:[
{标签:“材料”,值:“材料2”},
{标签:“类型”,值:“类型1”}
]
},
{
sku:3,
特点:[“棉质”],
字段:[
{标签:“材料”,值:“材料3”},
{标签:“类型”,值:“类型2”}
]
}
];
const fieldsArr=[“材料1”、“材料2”、“类型1”、“薄型”];
常量res=abc.filter(项=>
[…item.features,…item.fields.map(x=>x.value)]。一些(fea=>
字段包括(fea)
)
);
控制台日志(res);
//更新:使用destructure更简洁
const res2=abc.filter({features,fields})=>
[…features,…fields.map(({value})=>value)]。一些(fea=>
字段包括(fea)
)
);
console.log(res2)
当您可以使用过滤器时,为什么要使用forEach
和push
?np@YogeshKudikala,现在退房。