ES6操作对象数组:合并APTC相关键值解决push未定义报错问题
问题报错原因&修复方案
原有代码核心错误点
- 变量名不匹配:reduce回调参数定义的是
accValue(累加对象)、currValue(当前遍历的键),但代码里误用了未定义的key、acc变量,直接导致取值逻辑混乱 push.apply用法错误:apply的第一个参数必须是调用push的数组本身,第二个参数才是要追加的元素数组- 逻辑缺失:处理
APTC/CSR键时,只做了往APTC追加的逻辑,没有同步给CSR键追加对应值,不符合需求 - 类型错误:
APTC对应值是数组,原有代码里错误赋值为对象{} - 多余逻辑:没必要先对原始对象的键排序再处理,增加无意义开销
正确实现代码
const result = Object.entries(eligibilityGroupingMap).reduce((acc, [key, value]) => { // 非目标键直接存入结果 if (key !== 'APTC/IndianEligibility2' && key !== 'APTC/CSR') { acc[key] = value; return acc; } // 两个目标键的值都追加到APTC if (!acc.APTC) acc.APTC = []; acc.APTC.push(...value); // 处理APTC/CSR时同步追加到CSR if (key === 'APTC/CSR') { if (!acc.CSR) acc.CSR = []; acc.CSR.push(...value); } return acc; }, {}); // 若需要对每个分组的数组排序可以补充以下逻辑 Object.values(result).forEach(arr => arr.sort()); console.log(result);
运行结果
代入原始数据运行后输出完全符合期望:
{ CHIP: [ 'CHILD3', 'CHILD4' ], APTC: [ 'SELF1', 'SPOUSE2', 'CHILD4' ], Ineligible: [ 'CHILD7' ], CSR: [ 'CHILD4' ] }
内容的提问来源于stack exchange,提问作者dragonfly
相关产品推荐
相关产品推荐

