首页 > 解决方案 > 计算数组的值并将它们添加到对象(TypeScript)

问题描述

我有这个对象,我想知道每个用户有多少项目并将它们添加到一个新对象(用户是动态的)

[{
    "user": "user1"
  }, {
    "user": "user1"
  }, {
    "user": "user2"
  }, {
    "user": "user3"
}]

例如,使用前一个对象,您应该像这样创建一个新对象:

[{"user":"user1", "count": 2},{"user":"user2","count":1},{"user":"user3","count":1}]

我试过一个过滤器,做这样的事情

const count = (array, user) => {
        return array.filter(n => n.user=== user).length;
      };

但是新对象是由 harcode 创建的

非常感谢您的帮助

标签: angulartypescript

解决方案


我会在Array.prototype.reduce方法的帮助下做到这一点:

const arr = [
  {
    "user": "user1"
  }, {
    "user": "user1"
  }, {
    "user": "user2"
  }, {
    "user": "user3"
  }
];

const usersByCountMap = arr.reduce((acc, cur) => {
  acc[cur.user] = (acc[cur.user] || 0) + 1;

  return acc;
}, {});

const usersByCountArr = Object.keys(usersByCountMap).map(key => ({ user: key, count: usersByCountMap[key ]}));

console.log(usersByCountArr);


推荐阅读