You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 02:52:34