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

如何将合并数组转为对象数组:指定键数组+奇偶索引拆分

实现方法解析

这事儿不难,咱们一步步拆解需求来实现:你有3个固定键,对应的数据是6个元素,要把每个键下的第1个值凑成第一个对象,第2个值凑成第二个对象,最终得到目标数组格式。

下面是具体的JavaScript实现代码,我会同步解释逻辑:

const keyArr = ["meat", "veggies", "fish"];
const meatArr = ["chicken", "pork"];
const vegArr = ["lettuce", "beans"];
const fishArr = ["shark", "nemo"];
const dataArr = meatArr.concat(vegArr, fishArr);

// 计算要生成的对象总数:总数据长度 ÷ 键的数量,这里是6÷3=2
const objCount = dataArr.length / keyArr.length;
const result = [];

for (let i = 0; i < objCount; i++) {
  // 初始化当前要构建的空对象
  const currentObj = {};
  keyArr.forEach((key, keyIndex) => {
    // 找到当前key对应的数据在dataArr中的位置
    // 公式逻辑:每个key对应objCount个数据,所以先跳keyIndex组,再取第i个元素
    // 比如第一个对象(i=0):
    // meat(keyIndex=0)→ 0*2+0=0 → dataArr[0]即chicken
    // veggies(keyIndex=1)→1*2+0=2 → dataArr[2]即lettuce
    // fish(keyIndex=2)→2*2+0=4 → dataArr[4]即shark
    const dataIndex = keyIndex * objCount + i;
    currentObj[key] = dataArr[dataIndex];
  });
  result.push(currentObj);
}

console.log(result);
// 输出完全符合你的期望:
// [ {meat: "chicken", veggies: "lettuce", fish:"shark"}, {meat:"pork", veggies: "beans", fish: "nemo"} ]

逻辑拆解

  1. 动态计算对象数量:用总数据长度除以键的数量,确保就算后续键的数量或每个键对应的数据个数变化,代码也能自动适配。
  2. 逐个构建对象:遍历每个对象的索引,为每个索引创建空对象,再逐一匹配键和对应的数据。
  3. 精准定位数据位置:通过keyIndex * objCount + i这个公式,快速找到每个键在不同对象中对应的数据位置,避免硬写索引的麻烦。

内容的提问来源于stack exchange,提问作者AngularNewbie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:14:46