You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript:从字典数组统计各userId的completed为true的次数

按userId统计completed为true的计数

你可以用Array.reduce()方法高效实现这个统计,它只需要遍历一次数组,适合处理大型数据集:

const data = [{"userId":1, "completed":true},
        {"userId":1, "completed":false},
        {"userId":1, "completed":true},
        {"userId":2, "completed":false},
        {"userId":2, "completed":true}
];

const completedCounts = data.reduce((acc, item) => {
  // 初始化当前userId的计数(如果还没存在的话)
  acc[item.userId] = acc[item.userId] || 0;
  // 仅当completed为true时增加计数
  if (item.completed) {
    acc[item.userId]++;
  }
  return acc;
}, {});

console.log(completedCounts);
// 输出结果: { 1: 2, 2: 1 }

代码说明

  • reduce的初始值是一个空对象{},用来存储每个userId对应的计数
  • 遍历数组时,先检查当前userId是否已经在累加器acc中,没有的话就设为0
  • 当item.completed为true时,给对应userId的计数加1
  • 最终返回的acc就是我们需要的统计结果

如果你更倾向于先过滤再统计的直观逻辑,也可以先筛选出所有completed: true的项,再用reduce统计:

const completedItems = data.filter(item => item.completed);
const completedCounts = completedItems.reduce((acc, item) => {
  acc[item.userId] = (acc[item.userId] || 0) + 1;
  return acc;
}, {});

这种方式逻辑更易懂,但对于超大型数组,一次reduce遍历的效率会更高,因为减少了一次数组遍历操作。

内容的提问来源于stack exchange,提问作者Malcom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:27:17