gpt4 book ai didi

javascript - 总结对象数组的频率

转载 作者:搜寻专家 更新时间:2023-11-01 04:55:55 24 4
gpt4 key购买 nike

假设我有以下对象数组。

data = [
{ x: 1, y: 1 },
{ x: 2, y: 2 },
{ x: 3, y: 3 },
{ x: 2, y: 2 },
{ x: 1, y: 1 },
{ x: 1, y: 2 },
{ x: 1, y: 1 }
]

我需要的是汇总数组中相同对象的频率。输出将如下所示:

summary = [
{ x: 1, y: 1, f: 3 },
{ x: 1, y: 2, f: 1 },
{ x: 2, y: 2, f: 2 },
{ x: 3, y: 3, f: 1 }
]

现在我有这段代码

const summary = data.map((item, index, array) => {
return { x: item.x, y: item.y, f: array.filter(i => i === item).length };
});

但我想我可以通过使用 reduceincludes 做得更好。有什么想法吗?

最佳答案

归约成一个对象,其键唯一代表一个对象,其值为对象(具有xyf属性) .在每次迭代中,增加适当键的 f 属性,或者在累加器上创建键(如果它尚不存在):

const data = [
{ x: 1, y: 1 },
{ x: 2, y: 2 },
{ x: 3, y: 3 },
{ x: 2, y: 2 },
{ x: 1, y: 1 },
{ x: 1, y: 2 },
{ x: 1, y: 1 }
];
const countObj = data.reduce((a, obj) => {
const objString = obj.x + '_' + obj.y;
if (!a[objString]) {
a[objString] = { ...obj, f: 1 };
} else {
a[objString].f++;
}
return a;
}, {});
const output = Object.values(countObj);
console.log(output);

关于javascript - 总结对象数组的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57600433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com