Javascript:根据值将数组中的相似项目分组

时间:2018-11-19 23:32:11

标签: javascript arrays

我有一个这样的对象数组。

[
    {
        _id: 123
    },
    {
        _id: 123
    },
    {
        _id: 321
    }
]

我想通过_id对相似的项目进行分组,并且还要计算每个唯一_id的项目数...

[
    {
        _id: 123
        qty: 2
    },
    {
        _id: 321
        qty: 1
    }
]

使用javascript做到这一点的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以在O(n)时间内使用Array.prototype.reduce()Map作为累加器来完成此操作:

const array = [{'_id':123},{'_id':123},{'_id':321}]
const groups = [...array.reduce(
  (map, { _id }) => map.set(_id, (map.get(_id) || 0) + 1),
  new Map()
)].map(
  ([_id, qty]) => ({ _id, qty })
)

console.log(groups)