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

如何用单个reduce简化数组转方向次数统计对象的代码?

简化方案:单次reduce实现计数

首先你的原代码存在逻辑错误:比如统计'n'的数量时,return acc++会导致累加器额外自增,最终统计结果会偏离实际数量(比如5个'n'会算出9)。另外两次filter+reduce的组合会多次遍历数组,效率不高,用一次reduce就能搞定:

const walk = ['n','s','n','s','n','s','n','s','n','s'];
const directionCounts = walk.reduce((counts, dir) => {
  // 把方向缩写映射为目标键名
  const key = dir === 'n' ? 'north' : 'south';
  // 累加计数,若键不存在则初始化为0再加1
  counts[key] = (counts[key] || 0) + 1;
  return counts;
}, {}); // 初始化空对象作为累加器

代码说明:

  • 只遍历数组一次,比原方案的多次遍历更高效
  • 累加器counts是最终的统计对象,初始化为空对象(也可以提前初始化{ north: 0, south: 0 },效果一致)
  • 对每个元素,先把缩写n/s映射为north/south,然后对应键的计数加1:(counts[key] || 0)处理键未定义的情况(空对象初始化时第一次遇到该键会是undefined,undefined || 0取0)
  • 每次迭代返回更新后的累加器,供下一次循环使用

如果希望跳过初始值判断,也可以直接初始化计数的默认值,代码会更简洁:

const directionCounts = walk.reduce((counts, dir) => {
  counts[dir === 'n' ? 'north' : 'south'] += 1;
  return counts;
}, { north: 0, south: 0 });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:42:52