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

JavaScript中按新键名动态合并对象数组的方案求助

动态合并多组日期数据并重命名value字段

问题描述

给定一个包含多组对象数组的数组A(子数组数量不固定):

const A = [
  [{date: '2022-12-05', value: 10.6}, {date: '2022-12-06', value: 5.6}, {date: '2022-12-07', value: 8.6}],
  [{date: '2022-12-05', value: 4.2}, {date: '2022-12-06', value: 12.3}, {date: '2022-12-07', value: 9.5}],
  [{date: '2022-12-05', value: 5.6}, {date: '2022-12-06', value: 9.8}, {date: '2022-12-07', value: 7.8}]
];

需要将其转换为按日期合并的数组B,把原value键按子数组序号重命名为value1、value2……:

const B = [
  {date: '2022-12-05', value1: 10.6, value2: 4.2, value3: 5.6},
  {date: '2022-12-06', value1: 5.6, value2: 12.3, value3: 9.8},
  {date: '2022-12-07', value1: 8.6, value2: 9.5, value3: 7.8}
];

解决方案

利用Map高效按日期分组,动态适配任意数量的子数组,实现代码如下:

function transformArray(A) {
  const dateMap = new Map();
  
  A.forEach((subArray, index) => {
    const valueKey = `value${index + 1}`;
    subArray.forEach(item => {
      // 首次遇到该日期时初始化对象
      if (!dateMap.has(item.date)) {
        dateMap.set(item.date, { date: item.date });
      }
      // 将当前子数组的value按序号重命名后合并
      dateMap.get(item.date)[valueKey] = item.value;
    });
  });
  
  // 将Map中的值转换为数组返回
  return Array.from(dateMap.values());
}

// 测试示例
const A = [
  [{date: '2022-12-05', value: 10.6}, {date: '2022-12-06', value: 5.6}, {date: '2022-12-07', value: 8.6}],
  [{date: '2022-12-05', value: 4.2}, {date: '2022-12-06', value: 12.3}, {date: '2022-12-07', value: 9.5}],
  [{date: '2022-12-05', value: 5.6}, {date: '2022-12-06', value: 9.8}, {date: '2022-12-07', value: 7.8}]
];

const B = transformArray(A);
console.log(B);

关键说明

  • 自动适配子数组数量:无论A中有1组还是多组子数组,都会生成对应的valueN键
  • 高效分组:使用Map保证时间复杂度为O(n)(n为A中所有对象的总数)
  • 自动初始化:每个日期对象仅创建一次,避免重复操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:01:05