如何在JavaScript中统计数组每个元素的累计出现次第次数
实现方法
你之前的写法只会输出全局计数总览,没有保留原数组的位置信息。要得到和原数组位置一一对应的计数结果,可参考以下两种方案:
方案1:使用map遍历(更直观)
在遍历过程中用额外对象记录每个元素的累计出现次数,每次遍历直接返回当前元素对应的次数字符串即可:
let arr = ['good','is','good'] const countMap = {} const result = arr.map(item => { countMap[item] = (countMap[item] || 0) + 1 return `${item}:${countMap[item]}` })
执行后result的值为['good:1', 'is:1', 'good:2'],完全符合需求。
方案2:使用reduce实现
如果你希望只用reduce完成,可以把累计值设置为同时包含计数映射和结果数组的对象:
let arr = ['good','is','good'] const result = arr.reduce((acc, curr) => { acc.countMap[curr] = (acc.countMap[curr] || 0) + 1 acc.result.push(`${curr}:${acc.countMap[curr]}`) return acc }, { countMap: {}, result: [] }).result
得到的结果和方案1完全一致。
内容的提问来源于stack exchange,提问作者田伯清
相关产品推荐
相关产品推荐

