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

NodeJS合并带嵌套键的两份数据时输出元素全部相同问题排查

问题原因

你遇到的是JavaScript对象引用共享的问题,具体触发逻辑如下:

  1. 你没有在赋值前判断data1中是否存在statistic.label对应的键,你的初始化逻辑应该是直接把已有的类别(比如qrCode)的日期对象直接赋值给了新增的类别键,导致所有新增类别都和原有类别指向同一个内存地址的对象。
  2. 此时你修改任意一个类别下的日期值,所有共享该引用的类别值都会同步修改,最终呈现出所有类别值完全一致的现象。同时你的现有逻辑也不会给新增类别生成独立的默认值结构。

修复方案

首先提前定义所有日期的默认值模板,每次新增类别时拷贝模板生成独立对象,避免引用共享:

// 第一步:定义统一的日期默认模板,所有日期初始值为0
const dateTemplate = {
  "2021-10-03": 0,
  "2021-10-04": 0,
  "2021-10-05": 0,
  "2021-10-06": 0,
  "2021-10-07": 0,
  "2021-10-08": 0,
  "2021-10-09": 0
};

// 第二步:修改遍历合并逻辑
data2.forEach((statistic) => {
  // 不存在对应类别时,先拷贝模板创建独立的默认结构
  if (!data1[statistic.label]) {
    data1[statistic.label] = {...dateTemplate };
  }
  // 再更新对应日期的分数
  data1[statistic.label][statistic.date] = Number(statistic.score);
});

如果你的日期范围是动态的,也可以提前从现有类别中提取所有日期生成模板:

// 从已有类别中提取所有日期生成模板
const existDates = Object.keys(data1.qrCode);
const dateTemplate = Object.fromEntries(existDates.map(date => [date, 0]));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:36:06