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

如何将含双数组的JavaScript数据集转换为对象数组?

JavaScript:将扁平化数据转换为对象数组的优雅方法

需求说明

需要把如下扁平化结构的数据集:

const dataSet = [
  {
    last_updated: 1662040601,
    x: [
      1660953600, 1661040000, 1661126400, 1661212800, 1661299200, 1661385600,
      1661472000, 1661558400, 1661644800, 1661731200, 1661817600, 1661904000,
    ],
    y: [
      0.07, 0.062, 0.06, 0.0725, 0.075, 0.089, 0.0799, 0.1167, 0.089, 0.08,
      0.077, 0.0639,
    ],
  },
];

转换为每个元素包含data和value的对象数组:

const array = [
  { data: 1660953600, value: 0.07 },
  { data: 1661040000, value: 0.062 },
  { data: 1661126400, value: 0.06 },
  { data: 1661212800, value: 0.0725 },
  // ... 剩余对应元素
];

尝试的代码及问题

尝试了以下代码,但未能得到预期结果:

const arri = dataSet.map((data) => ({
  data: data.x.map((data) => data),
  value: data.y,
}));

这段代码生成的是包含data数组和value数组的对象,而非每个元素对应一组键值对的目标数组。


解决方案

方法1:针对单元素dataSet的直接转换

如果确定dataSet中只有一个对象,直接遍历其x数组,利用索引匹配y数组对应位置的值:

const result = dataSet[0].x.map((xVal, index) => ({
  data: xVal,
  value: dataSet[0].y[index]
}));

方法2:处理多元素dataSet的合并转换

如果dataSet可能包含多个对象,需要将所有对象的x/y转换后合并成一个数组,可使用flatMap:

const result = dataSet.flatMap(item => 
  item.x.map((xVal, idx) => ({
    data: xVal,
    value: item.y[idx]
  }))
);

方法3:添加边界检查(兼容数组长度不一致场景)

若担心x和y数组长度不匹配,可添加判断逻辑,避免索引越界:

const targetData = dataSet[0];
const result = targetData.x.map((xVal, index) => ({
  data: xVal,
  value: index < targetData.y.length ? targetData.y[index] : null // 可替换为其他默认值
}));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:18:33