JavaScript如何检测重复key并合并对应属性生成目标对象
问题原因
- 你使用
map返回的是多个独立对象组成的数组,Object.assign合并数组时会把数组的索引作为新对象的键,不会自动合并相同外层key的属性 - 缺少重复外层key的判断和属性合并逻辑,自然无法得到嵌套合并的结果
修正后的代码
const output = arr.reduce((acc, item) => { // 拆分key为外层前缀和内层属性名 const [prefix, prop] = item.key.split('_'); // 外层前缀不存在时先初始化空对象 if (!acc[prefix]) { acc[prefix] = {}; } // 为对应前缀的对象新增属性,值设为true acc[prefix][prop] = true; return acc; }, {}); // 初始值为空的结果对象 console.log(output);
代码说明
- 采用
Array.prototype.reduce遍历数组,第一个参数为累加处理函数,第二个参数是初始的空结果对象 - 每次遍历拆分key后先判断结果对象中是否已存在对应前缀的内层对象,不存在就先初始化
- 直接给内层对象新增属性即可自动完成重复前缀的属性合并,运行后输出和你预期的结构完全一致
内容的提问来源于stack exchange,提问作者Anil Singh
相关产品推荐
相关产品推荐

