如何将含不同键的对象数组转换为单个对象?
解决数组转单个对象的问题
你的问题出在照搬的代码逻辑和你的数组结构不匹配:
你使用的原代码是针对每个元素包含key和value固定属性的数组(比如{key:"11", value:"1100"}),但你的数组元素是每个对象只有一个独立的自定义键值对(比如{new: 'val'}),所以原代码里的item.key和item.value根本取不到有效值,自然返回{undefined: undefined}。
针对你的数组结构,有几种简单的解决方法:
方法1:使用reduce + Object.assign
直接将数组中的每个对象合并到累加对象中:
const arr = [{new: 'val'}, {new2: 'val2'}, {new3: 'val3'}]; const mergedObj = arr.reduce((acc, curr) => Object.assign(acc, curr), {}); console.log(mergedObj); // 输出:{new: 'val', new2: 'val2', new3: 'val3'}
方法2:使用扩展运算符(更简洁)
利用Object.assign结合扩展运算符一次性合并所有数组元素:
const arr = [{new: 'val'}, {new2: 'val2'}, {new3: 'val3'}]; const mergedObj = Object.assign({}, ...arr); console.log(mergedObj);
方法3:ES2020+ 用Object.fromEntries
先把每个对象转成键值对数组,再合并成单个对象:
const arr = [{new: 'val'}, {new2: 'val2'}, {new3: 'val3'}]; const mergedObj = Object.fromEntries(arr.flatMap(item => Object.entries(item))); console.log(mergedObj);
内容的提问来源于stack exchange,提问作者DeepGunner
相关产品推荐
相关产品推荐

