如何计算数组中的相同值并创建不同的数组?

How can I count the same values ​in the array and create a different array?

[{
    "project_name": "test",
    "status": "High"
},{
    "project_name": "test",
    "status": "Critical"
},{
    "project_name": "test",
    "status": "Critical"
}]

我用 Object.entries 尝试了很多,但我无法达到我想要的结果。

预期输出

[{
  project_name: "test",
  value: 1,
  status: "High",
},
{
  project_name: "test",
  value: 2,
  status: "Critical",
}]

我想做的不是增加一个值,而是考虑第一个数组中更多的状态值相同的对象。我想把它们都数一数并分组。

  1. 创建一个临时对象来保存更新的信息。
  2. 遍历数组,并为每个对象从 product_namestatus 创建一个定制键。
  3. 如果键在临时对象上不存在,则从当前对象创建一个新对象,并添加一个值属性。
  4. 将值增加一。
  5. 您终于可以使用 Object.values 从临时数组中获取新对象了。

const data=[{project_name:"test",status:"High"},{project_name:"test",status:"Critical"},{project_name:"test",status:"Critical"}];

const temp = {};

for (const obj of data) {
  const { project_name, status } = obj;
  const key = `${project_name}-${status}`;
  temp[key] ??= { ...obj, value: 0 };
  temp[key].value += 1;
}

console.log(Object.values(temp));

其他文档


您也可以使用reduce。同样的原则适用(但这里你只是为累加器初始化一个空对象,并将其传递给数组的下一次迭代)尽管如果你是 JS 新手,循环可能更容易理解。

const data=[{project_name:"test",status:"High"},{project_name:"test",status:"Critical"},{project_name:"test",status:"Critical"}];

const out = data.reduce((acc, obj) => {
  const { project_name, status } = obj;
  const key = `${project_name}-${status}`;
  acc[key] ??= { ...obj, value: 0 };
  acc[key].value += 1;
  return acc;
}, {});

console.log(Object.values(out));