过滤对象数组并返回键值出现 x 次的对象数组

时间:2020-12-29 01:04:29

标签: javascript

假设我有这个对象数组,我想按 store_id 的计数进行过滤。

[{
ingredient_id: "lim1",
status: true,
store_id: "1"
},
{
ingredient_id: "lem1",
status: true,
store_id: "1"
},
{
ingredient_id: "lem1",
status: true,
store_id: "5"
}]

如果 x 的值为 2,我想要的输出是:

[{
ingredient_id: "lim1",
status: true,
store_id: "1"
},
{
ingredient_id: "lem1",
status: true,
store_id: "1"
}]

因为 store_id:'1' 出现了两次

但是,如果 x 的值为 3,我希望它返回空。

我在所有寻找答案的地方都只向我展示了如何删除重复项,而不是仅仅返回它们并尝试相反的方法对我没有帮助。

1 个答案:

答案 0 :(得分:3)

您可以通过生成一个包含每个 store_id 值的计数的对象来解决这个问题,然后根据每个条目 store_id 的计数是否与 x 匹配来过滤您的输入数组价值:

const data = [{
    ingredient_id: "lim1",
    status: true,
    store_id: "1"
  },
  {
    ingredient_id: "lem1",
    status: true,
    store_id: "1"
  },
  {
    ingredient_id: "lem1",
    status: true,
    store_id: "5"
  }
];

const counts = data.reduce((c, v) => {
  c[v.store_id] = (c[v.store_id] || 0) + 1;
  return c;
}, {});

const x = 2;

const result = data.filter(v => counts[v.store_id] == x);
console.log(result);