如何计算数组中的相同值并创建不同的数组?
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",
}]
我想做的不是增加一个值,而是考虑第一个数组中更多的状态值相同的对象。我想把它们都数一数并分组。
- 创建一个临时对象来保存更新的信息。
- 遍历数组,并为每个对象从
product_name
和 status
创建一个定制键。
- 如果键在临时对象上不存在,则从当前对象创建一个新对象,并添加一个值属性。
- 将值增加一。
- 您终于可以使用
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));
[{
"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",
}]
我想做的不是增加一个值,而是考虑第一个数组中更多的状态值相同的对象。我想把它们都数一数并分组。
- 创建一个临时对象来保存更新的信息。
- 遍历数组,并为每个对象从
product_name
和status
创建一个定制键。 - 如果键在临时对象上不存在,则从当前对象创建一个新对象,并添加一个值属性。
- 将值增加一。
- 您终于可以使用
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));