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

如何将API返回的特定JavaScript数组转换为目标二维数组?

解决方案:将API返回的字段数据转换为目标二维数组

原始API数据格式

假设你从API获取到的数据结构如下:

const apiData = {
  fields: [
    {
      name: "A",
      values: {
        data: [1, 2, 3, 4, 5]
      }
    },
    {
      name: "B",
      values: {
        data: [6, 7, 8, 9, 10]
      }
    }
  ]
};

目标格式

需要转换成如下二维数组:

var d = [ [1,6],[2,7],[3,8],[4,9],[5,10] ]

实现方法

方法1:数组高阶函数实现(简洁高效)

这种方法适用于所有字段的data数组长度一致的场景,代码简洁可读性高:

// 提取所有字段的data数组
const dataArrays = apiData.fields.map(field => field.values.data);

// 转置数组得到目标格式
const d = dataArrays[0].map((_, idx) => dataArrays.map(arr => arr[idx]));

方法2:兼容数组长度不一致的场景

如果API返回的各字段data数组长度可能不同,可以取最短数组的长度生成结果,避免索引越界:

const dataArrays = apiData.fields.map(field => field.values.data);
// 获取所有数组中最短的长度
const minLen = Math.min(...dataArrays.map(arr => arr.length));

// 生成目标数组
const d = Array.from({ length: minLen }, (_, idx) => 
  dataArrays.map(arr => arr[idx])
);

方法3:传统for循环实现(新手友好)

如果更习惯用循环逻辑,这种方式步骤清晰,容易理解:

const fields = apiData.fields;
// 以第一个字段的data数组长度为基准
const rowCount = fields[0].values.data.length;
const d = [];

for (let i = 0; i < rowCount; i++) {
  const currentRow = [];
  // 遍历每个字段,取对应索引的元素
  for (let j = 0; j < fields.length; j++) {
    currentRow.push(fields[j].values.data[i]);
  }
  d.push(currentRow);
}

以上三种方法都能得到你需要的二维数组格式,可根据实际场景选择合适的实现方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:21:04