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

如何用map或reduce优化字符串数组转计数HashMap的实现?

用reduce实现数字计数HashMap的优化方案

当然可以用reduce(结合flatMap)来实现更简洁的写法,比嵌套循环更优雅,且逻辑清晰:

代码实现

const arr = ["88 99", "20 99", "12 12"];
const countMap = arr
  .flatMap(str => str.split(' '))
  .reduce((acc, num) => {
    acc[num] = (acc[num] || 0) + 1;
    return acc;
  }, {});

console.log(countMap); // 输出: {"88": 1, "99": 2, "20": 1, "12": 1}

逻辑说明

  1. 扁平化数组:flatMap会先把每个字符串按空格拆分成子数组,再自动合并成一维数组,原数组会被处理成 ["88", "99", "20", "99", "12", "12"],省去了手动处理二维数组的嵌套循环
  2. 统计计数:reduce遍历扁平化后的数组,维护一个累加对象acc:
    • 若当前数字已在acc中,就把对应计数加1
    • 若不存在,就初始化为0再加1
  3. 初始值:reduce的第二个参数{}是累加对象的初始值,确保从空对象开始统计

兼容旧环境的写法

如果你的运行环境不支持ES2019的flatMap,也可以用reduce嵌套处理:

const arr = ["88 99", "20 99", "12 12"];
const countMap = arr.reduce((acc, str) => {
  str.split(' ').forEach(num => {
    acc[num] = (acc[num] || 0) + 1;
  });
  return acc;
}, {});

这两种写法都避免了手动嵌套循环,代码更简洁易读,属于JavaScript函数式编程的常规用法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:15:16