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

JavaScript实现统计各leader空dateExit值数量并存储到数组

解法与优化建议

核心思路

用一个对象作为中间统计容器,遍历数据时记录每位leaderDisplay对应的dateExit === ""的次数,最后将对象的键、值分别提取为目标数组。这种方式仅需遍历一次原始数据,效率更高,逻辑也更简洁。

基础实现代码

// 假设你的原始数据集结构如下
const rawData = [
  { leaderDisplay: 'Albert Owens', dateExit: '' },
  { leaderDisplay: 'Albert Owens', dateExit: '' },
  { leaderDisplay: 'Tina Snow', dateExit: '' },
  { leaderDisplay: 'Rick Sanchez', dateExit: '' },
  { leaderDisplay: 'Rick Sanchez', dateExit: '' },
  { leaderDisplay: 'Rick Sanchez', dateExit: '2023-10-01' } // 此条不满足条件,不会被统计
];

// 初始化统计容器
const leaderCountMap = {};

// 遍历统计
rawData.forEach(item => {
  if (item.dateExit === "") {
    // 存在则计数+1,不存在则初始化为1
    leaderCountMap[item.leaderDisplay] = (leaderCountMap[item.leaderDisplay] || 0) + 1;
  }
});

// 生成目标数组
const leaderNames = Object.keys(leaderCountMap);
const emptyExitCounts = Object.values(leaderCountMap);

console.log(leaderNames); // 输出: ['Albert Owens','Tina Snow','Rick Sanchez']
console.log(emptyExitCounts); // 输出: [2,1,2]

简化优化(使用reduce)

可以用数组的reduce方法将遍历和统计合并,代码更紧凑:

const leaderCountMap = rawData.reduce((acc, item) => {
  if (item.dateExit === "") {
    acc[item.leaderDisplay] = (acc[item.leaderDisplay] || 0) + 1;
  }
  return acc;
}, {});

// 后续生成数组的代码和上面一致
const leaderNames = Object.keys(leaderCountMap);
const emptyExitCounts = Object.values(leaderCountMap);

优势说明

  • 时间复杂度为O(n):仅遍历一次原始数据,比多次筛选、分组的方式更高效
  • 逻辑清晰:用对象做映射,直接对应leader和计数,无额外复杂判断
  • 代码简洁:避免冗余的中间数组操作,降低出错概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:56:29