JS统计数组元素重复次数生成指定嵌套对象的问题排查
问题原因
你的代码没有生成预期嵌套结构的核心原因有两个:
- 赋值逻辑错误:你给
countsObj[x]赋值时,直接存入的是累加后的数字值,并没有创建包含count、filterState属性的嵌套对象结构。 - 存在无效代码:箭头函数中包裹的
{count: xxx}对象是回调函数的返回值,而forEach本身不会使用回调的返回值,这部分代码完全没有对countsObj产生任何修改作用。
实现思路
要得到目标结构,按以下逻辑处理即可:
- 遍历原始数组的每一个元素
- 遍历到元素值
x时,先检查countsObj中是否存在x这个键,如果不存在,先初始化该键的值为符合要求的对象结构:{count: 0, filterState: false} - 对
x对应对象下的count属性做累加1操作
可运行的正确代码
let countsRaw = [7, 8, 7, 6] let countsObj = {}; countsRaw.forEach((x) => { // 首次遇到该值时初始化嵌套对象结构 if (!countsObj[x]) { countsObj[x] = { count: 0, filterState: false } } // 完成计数累加 countsObj[x].count += 1 })
运行上述代码后,countsObj的输出和预期结构完全一致:
{ 6: {count: 1, filterState: false}, 7: {count: 2, filterState: false}, 8: {count: 1, filterState: false} }
内容的提问来源于stack exchange,提问作者streetRAT
相关产品推荐
相关产品推荐

