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

JavaScript将表头表体数组转换为JSON对象的循环逻辑问题修复

问题背景

需要实现两个数组到目标JSON对象的转换:

  • 第一个数组为表头字段集合
  • 第二个数组为表体内容集合
  • 映射规则:表体的每一列数据,按顺序对应赋值给表头的同名字段
    输入输出示例

原有实现采用三层嵌套循环,键名生成正常,但最终结果仅保留表体最后一行数据,原有代码如下:

const header = ['A','B','C','D']
const body = [
  ["A1","A2","A3","A4","A5","A6"],
  ["B1","B2","B3","B4","B5","B6"],
  ["C1","C2","C3","C4","C5","C6"],
  ["D1","D2","D3","D4","D5","D6"],
];

const json = [];

for (let y = 0; y < body[0].length; y++)
{
  const line = {};
  for(const hl of header)
  {
    for(const bo of body)
    {
      line[hl] = bo[y];
    }
  } 
  json.push(line);
}

console.log(json);
错误原因

三层循环存在值覆盖问题:遍历body所有行的最内层循环,会反复覆盖同一个line[hl]的取值,循环结束后只会保留body最后一行对应位置的值。该逻辑不需要三层嵌套,仅两层循环即可完成映射。

修正实现

核心逻辑:外层遍历表体列数(每一列对应一个输出对象),内层遍历表头时直接按索引匹配body对应行的当前列值即可,无需额外遍历body。

const header = ['A','B','C','D']
const body = [
  ["A1","A2","A3","A4","A5","A6"],
  ["B1","B2","B3","B4","B5","B6"],
  ["C1","C2","C3","C4","C5","C6"],
  ["D1","D2","D3","D4","D5","D6"],
];

const json = [];
// 遍历所有列,每列生成一个对象
for (let colIdx = 0; colIdx < body[0].length; colIdx++) {
  const line = {};
  // 按表头索引匹配对应行的列值
  header.forEach((key, rowIdx) => {
    line[key] = body[rowIdx][colIdx];
  });
  json.push(line);
}

console.log(json);
运行结果
[
  {A: "A1", B: "B1", C: "C1", D: "D1"},
  {A: "A2", B: "B2", C: "C2", D: "D2"},
  {A: "A3", B: "B3", C: "C3", D: "D3"},
  {A: "A4", B: "B4", C: "C4", D: "D4"},
  {A: "A5", B: "B5", C: "C5", D: "D5"},
  {A: "A6", B: "B6", C: "C6", D: "D6"}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 21:03:40