【发布时间】:2019-12-27 06:03:36
【问题描述】:
假设我有以下对象数组。
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 };
});
但我想我可以使用reduce 或includes 做得更好。有什么想法吗?
【问题讨论】:
-
你应该使用
reduce。map总是返回一个元素个数相同的数组,但是你想组合等价的元素。 -
i === item不适用于对象。它要求对象相同,而不仅仅是具有相同的属性。见stackoverflow.com/questions/201183/… -
@Barmar 事实上,如果这段代码工作正常,我还没有检查好。我知道我需要进一步删除
map之后的重复项。无论如何感谢您的建议。
标签: javascript arrays object ecmascript-6 counting