javascript - 如果对象包含另一个数组中存在值的属性,则过滤对象数组

标签 javascript arrays javascript-objects

我有以下对象数组。

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, 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" }] }],        fieldsArr = ["Material1", "Material2", "Type1", "Slim"],
    result = abc.filter(({ features, fields }) =>
        features.some(v => fieldsArr.includes(v)) ||
        fields.some(({ value }) => fieldsArr.includes(value))
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如果对象包含另一个数组中存在值的属性,则过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60633156/

相关文章:

c - int LA[] = {1,2,3,4,5} c 中的内存分配困惑

Javascript:对象数组的复杂排序(帖子中的示例和预期结果)

javascript - Typescript 属性装饰器 - 需要帮助以了解以下情况如何发生?

javascript - react : async setState updates to late

javascript - 为什么不能在两个 dom 元素中附加同一个子元素?

php - 使用带有复选框数组的 javascript 函数

Java:实现数组中重复值的循环

JavaScript 函数调用语法

javascript - 逻辑与赋值

javascript - 客户支持字幕滚动