JavaScript如何统计对象数组value键值出现次数并追加计数后缀
问题说明
需要统计对象数组中value字段值的出现频次,对重复出现的同值项,从第二次出现开始追加(计数)后缀,计数从1开始递增。
测试源数据
var a = [ { id: 1, value: "10000"}, { id: 2, value: "20000"}, { id: 3, value: "30000"}, { id: 4, value: "10000"}, { id: 5, value: "20000"}, { id: 6, value: "40000"}, { id: 7, value: "10000"}, { id: 8, value: "70000"} ]
实现代码
通过哈希表记录每个value的出现次数,遍历数组时按规则生成新值,全程不修改原数组原始数据:
// 存储各value的重复出现计数 const valueCount = {}; const result = a.map(item => { // 浅拷贝当前对象,避免污染原数组 const current = { ...item }; const val = current.value; if (!(val in valueCount)) { // 首次出现,初始化计数为0,保留原始值 valueCount[val] = 0; } else { // 非首次出现,计数累加后拼接后缀 valueCount[val]++; current.value = `${val} (${valueCount[val]})`; } return current; });
结果说明
运行后输出完全符合计数规则:
- 仅出现1次的
30000、40000、70000全程保留原始值 - 累计出现3次的
10000:首次出现保留原值,第二次为10000 (1),第三次为10000 (2) - 累计出现2次的
20000:首次出现保留原值,第二次为20000 (1)
注:提问中给出的期望结果里id=8项写为
10000 (3)属于笔误,该项原始value为70000且仅出现1次,最终值应为70000。
内容的提问来源于stack exchange,提问作者Yogi
相关产品推荐
相关产品推荐

