JavaScript:将交替索引的键值对数组转换为对象数组的最简实现方法
Question: 将扁平数组转换为指定格式的对象数组
我有如下类型的数组:
["key1","value1","key2","value2"],想要将其转换为如下格式的对象数组:[{key1:"value1"},{key2:"value2"}]。请问实现该需求的最简方法是什么?补充说明:我已尝试过下述方法——先分离键和值再合并:
let a = ["key1","value1","key2","value2"]; let firstArr = [], secondArr = []; a.forEach( (a,i) => { (i % 2 === 0)? firstArr.push(a) : secondArr.push(a); })之后再合并firstArr和secondArr。
最简实现方法
你的思路是可行的,但确实可以更简洁——不需要拆分再合并,一次遍历就能搞定。推荐两种高效的写法:
方法1:使用reduce一步完成
reduce是处理这类数组转换的利器,直接在遍历过程中构建结果数组:
const originalArr = ["key1","value1","key2","value2"]; const result = originalArr.reduce((acc, current, index) => { // 索引为偶数时,当前元素是key,下一个元素是value if (index % 2 === 0) { acc.push({ [current]: originalArr[index + 1] }); } return acc; }, []); console.log(result); // 输出 [{key1: "value1"}, {key2: "value2"}]
这里利用了计算属性名([current])来动态设置对象的键,同时用reduce的累加器直接收集生成的对象,全程只需要遍历一次数组。
方法2:使用for循环(更直观)
如果觉得reduce有点抽象,这种循环写法可读性更强,代码量也很少:
const originalArr = ["key1","value1","key2","value2"]; const result = []; for (let i = 0; i < originalArr.length; i += 2) { result.push({ [originalArr[i]]: originalArr[i + 1] }); } console.log(result); // 同样输出目标格式
每次循环步进2,直接取当前索引的元素作为键,下一个索引的元素作为值,创建对象后推入结果数组,逻辑非常清晰。
这两种方法都比你原来的拆分合并方式更高效,代码也更简洁。
内容的提问来源于stack exchange,提问作者Akash Salunkhe
相关产品推荐
相关产品推荐

