如何将合并数组转为对象数组:指定键数组+奇偶索引拆分
实现方法解析
这事儿不难,咱们一步步拆解需求来实现:你有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"} ]
逻辑拆解
- 动态计算对象数量:用总数据长度除以键的数量,确保就算后续键的数量或每个键对应的数据个数变化,代码也能自动适配。
- 逐个构建对象:遍历每个对象的索引,为每个索引创建空对象,再逐一匹配键和对应的数据。
- 精准定位数据位置:通过
keyIndex * objCount + i这个公式,快速找到每个键在不同对象中对应的数据位置,避免硬写索引的麻烦。
内容的提问来源于stack exchange,提问作者AngularNewbie
相关产品推荐
相关产品推荐

