【问题标题】:How can I filter an array of objects by data from another array of objects? [closed]如何通过来自另一个对象数组的数据过滤对象数组? [关闭]
【发布时间】:2020-07-18 19:06:48
【问题描述】:

请帮助理解如何实现这一点:

var filterAarray = [
  { id: 1, key: "fruits" },
  { id: 2, key: "fruits" },
  { id: 4, key: "vegetables" },
];

var foodArray = [
  {
    fruits: [
      { id: 1, label: "Apple" },
      { id: 2, label: "Cherry" }
    ],
    vegetables: [
      { id: 4, label: "Cucumber" }
    ]
  },
  {
    fruits: [
      { id: 1, label: "Apple" },
      { id: 2, label: "Cherry" },
      { id: 3, label: "Strawberry" }
    ],
    vegetables: [
      { id: 4, label: "Cucumber" },
      { id: 5, label: "Tomato" }
    ]
  }, {
    fruits: [
      { id: 2, label: "Cherry" },
    ],
    vegetables: [
      { id: 5, label: "Tomato" }
    ]
  }
];

我需要获取经过过滤的对象数组 foodArray,其中包含来自 filterAarray 的所有数据。 结果必须是:

[
  {
    fruits: [
      { id: 1, label: "Apple" },
      { id: 2, label: "Cherry" }
    ],
    vegetables: [
      { id: 4, label: "Cucumber" }
    ]
  },
  {
    fruits: [
      { id: 1, label: "Apple" },
      { id: 2, label: "Cherry" },
      { id: 3, label: "Strawberry" }
    ],
    vegetables: [
      { id: 4, label: "Cucumber" },
      { id: 5, label: "Tomato" }
    ]
  }
];

即如果 'foodArray' 的对象存在于数组 'filterAarray' 中,则必须显示它们

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    这应该可行:

    foodArray.filter(obj =>
        filterArray.every(e => !!obj[e.key].find(unit => unit.id === e.id)),
      );
    

    总体思路:检查foodArray 中的每个对象。然后检查filterArray 中的每个 元素是否在key 的数组中找到

    看看:
    Array.filter
    Array.every
    Array.find

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-27
      • 2019-05-05
      • 2019-07-18
      • 2021-10-30
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多