如何将单动态键对象数组转换为包含所有动态键的单个对象
数组转合并对象的简洁实现
假设有如下结构的数组,每个元素都是只含单个键值对的对象:
const sourceArray = [ { "dynamicKey1": true }, { "dynamicKey2": false }, { "dynamicKey3": true }, // ...更多元素 ];
要把它合并成包含所有键值对的单一对象,有几种简洁的实现方式:
方法1:使用 Object.assign + 展开运算符
这是最常用的写法,利用Object.assign的合并特性,配合展开运算符把数组元素逐个传入:
const convertedObj = Object.assign({}, ...sourceArray);
方法2:使用数组 reduce 方法
通过迭代数组逐步合并对象,逻辑更直观,也适合需要自定义合并规则的场景:
const convertedObj = sourceArray.reduce((acc, curr) => ({ ...acc, ...curr }), {});
如果需要处理重复键的覆盖逻辑(后面的键值对覆盖前面的),这个写法也能直接满足。
方法3:纯对象展开语法(适合已知短数组)
如果数组长度固定且较短,也可以直接展开所有元素,但动态长度的场景还是前两种更实用:
const convertedObj = { ...sourceArray[0], ...sourceArray[1], ...sourceArray[2] };
注意:如果数组中存在重复的键名,后面的对象会覆盖前面的键值,这是对象合并的默认行为。
内容的提问来源于stack exchange,提问作者G.Hunt
相关产品推荐
相关产品推荐

