我有一个对象数组,例如:
const arr1 = [
{"from":"Monica","to":"Rachel"},
{"from":"Monica","to":"Rachel"},
{"from":"Monica","to":"Chandler"},
{"from":"Monica","to":"Chandler"},
{"from":"Ross","to":"Chandler"},
{"from":"Ross","to":"Monica"},
];
我想对两个键(“from”和“to”)相同的所有唯一实例进行排序和计数。
我可以成功地计算出仅比较一个键(“从”或“到”)的每个案例,但我找不到如何比较两者的解决方案。
这是我的示例代码:
let arr2 = Object.values(arr1.reduce((c, { from, to }) => {
c[from] = c[from] || { from, to, count: 0 };
c[from].count++;
return c;
}, {}));
console.log(arr2);
这是我现在得到的结果(因为代码仅比较“from”键):
console.log(arr2);
// Array(2)
// 0: {from: "Monica", to: "Rachel", count: 4}
// 1: {from: "Ross", to: "Chandler", count: 2}
// length: 2
这是我想要实现的结果:
console.log(arr2);
// Array(2)
// 0: {from: "Monica", to: "Rachel", count: 2}
// 1: {from: "Monica", to: "Chandler", count: 2}
// 2: {from: "Ross", to: "Chandler", count: 1}
// 3: {from: "Ross", to: "Monica", count: 1}
// length: 4
最佳答案
- 使用
Array.reduce
,您可以通过from
和to
变量对键对输入数组进行分组。 - 对于重复项,计数会增加,最后结果将存储在
groupedBy
对象上每个键的值上。 - 您只能使用
Object.values
提取值。
const arr1 = [
{"from":"Monica","to":"Rachel"},
{"from":"Monica","to":"Rachel"},
{"from":"Monica","to":"Chandler"},
{"from":"Monica","to":"Chandler"},
{"from":"Ross","to":"Chandler"},
{"from":"Ross","to":"Monica"},
];
const groupedBy = arr1.reduce((acc, cur) => {
const key = `${cur.from}_${cur.to}`;
acc[key] ? acc[key].count ++ : acc[key] = {
...cur,
count: 1
};
return acc;
}, {});
const result = Object.values(groupedBy);
console.log(result);
关于javascript - 寻找一种方法来比较和计算数组中所有嵌套对象键/值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64385902/