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,现在退房。