如何用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}
逻辑说明
- 扁平化数组:
flatMap会先把每个字符串按空格拆分成子数组,再自动合并成一维数组,原数组会被处理成["88", "99", "20", "99", "12", "12"],省去了手动处理二维数组的嵌套循环 - 统计计数:
reduce遍历扁平化后的数组,维护一个累加对象acc:- 若当前数字已在
acc中,就把对应计数加1 - 若不存在,就初始化为0再加1
- 若当前数字已在
- 初始值:
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
相关产品推荐
相关产品推荐

