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

如何根据键名递增JavaScript对象中的计数属性值?

解决JavaScript中按任务处理人统计待办任务数的简洁实现

你当前代码的核心问题是:每次遍历任务时,都会把itemsPerAssignee[assignee]重新赋值为{count: 0},不管之前是否已经存在该处理人的统计项,导致计数始终被重置,无法累加。

下面是几种简洁的修正方案:

方案1:短路求值初始化(兼容所有ES版本)

query.forEach(function(task) {
  const assignee = task.getAssignee();
  // 若当前处理人未被统计,先初始化count为0;已存在则直接复用现有对象
  itemsPerAssignee[assignee] = itemsPerAssignee[assignee] || { count: 0 };
  // 计数累加
  itemsPerAssignee[assignee].count++;
});

方案2:逻辑赋值简化(ES2021+)

利用空值合并赋值运算符??=,可以更紧凑地完成初始化+累加:

query.forEach(task => {
  const assignee = task.getAssignee();
  // 仅当assignee对应的属性不存在时,才初始化{count:0},随后直接自增
  (itemsPerAssignee[assignee] ??= { count: 0 }).count++;
});

方案3:用reduce一步生成统计结果

如果不需要提前声明空对象,可以用Array.reduce直接生成最终的统计对象,代码更聚合:

const itemsPerAssignee = query.reduce((acc, task) => {
  const assignee = task.getAssignee();
  acc[assignee] = acc[assignee] || { count: 0 };
  acc[assignee].count++;
  return acc;
}, {});

修正你的测试代码

你的测试代码存在两个明显问题:

  1. 数组元素错误:第一个元素是逗号拼接的字符串,应该拆分为独立的邮箱地址
  2. 遍历数组方式错误:for...in遍历数组拿到的是索引而非元素值

修正后的测试代码:

let itemsPerAssignee = {};
const users = ["user@user.com", "anotheruser@another.com", "user@user.com"];

users.forEach(user => {
  itemsPerAssignee[user] = itemsPerAssignee[user] || { count: 0 };
  itemsPerAssignee[user].count++;
});

// 遍历输出统计结果
for (const user in itemsPerAssignee) {
  console.log(`${user}: ${itemsPerAssignee[user].count}`);
}

执行后会输出:

user@user.com: 2
anotheruser@another.com: 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:54:52