首页 > 解决方案 > 我如何过滤一组对象以仅显示具有所有现有类型属性的对象的 id

问题描述

我从如下所示的 API 获取数据:

const flags = [
  {
    type: "manyCards",
    id: 1
  },
  {
    type: "manyCards",
    id: 2
  },
   {
    type: ":premiumCard",
    id: 1
  },
]

我想对其进行过滤/排序,以便它仅显示具有所有类型的 id,例如。id:1 同时拥有 manyCards 和 premiumCard。

我的结果就是result = [1]在这种情况下。

无法弄清楚要使用什么 Array 原型。

标签: arraysobjectfilterarray-map

解决方案


为此,我将按 id 对初始数据进行分组,这样我们就可以知道每个 id 有多少种类型。

完成此操作后,我们可以使用我们想要的任何条件进行过滤。

const flags = [
    {
        type: "manyCards",
        id: 1
    },
    {
        type: "manyCards",
        id: 2
    },
    {
        type: ":premiumCard",
        id: 1
    },
    {
        type: "manyCards",
        id: 3
    },
    {
        type: "manyCards",
        id: 2
    },
    {
        type: ":premiumCard",
        id: 3
    },
]

let grouped = flags.reduce(function (r, a) {
    r[a.id] = r[a.id] || []
    r[a.id].push(a.type)
    return r
}, {})
let result = Object.keys(grouped).filter(elem => (grouped[elem].includes("manyCards") && grouped[elem].includes(":premiumCard")))

console.log(result)


推荐阅读