如何统计对象数组中每个唯一属性值的出现次数
统计数组对象中state出现次数的实现方法
可以直接用Array.reduce方法实现,代码如下:
let users = [ {username: 'name1', state: 'California'}, {username: 'name2', state: 'Texas'}, {username: 'name3', state: 'California'}, {username: '4', state: 'Florida'}, {username: '4', state: 'Texas'} ]; // 统计每个state的用户数量 const stateCount = users.reduce((accumulator, currentItem) => { const currentState = currentItem.state; accumulator[currentState] = (accumulator[currentState] || 0) + 1; return accumulator; }, {}); console.log(stateCount);
运行后输出的统计结果:
{ California: 2, Texas: 2, Florida: 1 }
如果你需要数组格式的统计结果方便后续遍历,可以追加转换逻辑:
const stateCountList = Object.entries(stateCount).map(([state, count]) => ({ state, userCount: count }));
转换后的结果:
[ { state: 'California', userCount: 2 }, { state: 'Texas', userCount: 2 }, { state: 'Florida', userCount: 1 } ]
逻辑说明
- reduce方法的第一个参数是迭代回调函数,第二个参数
{}是统计结果的初始空对象 - 每次迭代拿到当前项的state值,若统计对象中已有该state的计数就加1,没有就默认从0开始计数加1
- 迭代完成后得到的就是所有state对应的用户总数
内容的提问来源于stack exchange,提问作者user3598632
相关产品推荐
相关产品推荐

