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

如何根据两个对象数组的匹配规则生成指定格式的新数组?

问题分析

你原有代码无法得到正确结果,存在以下几个语法和逻辑错误:

  • 初始化语法错误:var targetArray = ["category": "None"]属于非法语法,数组不能直接存储键值对,目标结构是数组包裹一个对象,应该先初始化内部的结果对象
  • 缺少映射关系:没有建立toBeKeysArray中id和处理后键名的对应关系,无法通过col_id直接匹配到要赋值的属性名
  • 累加逻辑错误:push是向数组新增元素的方法,无法实现对象属性值的累加,且没有将字符串格式的data转为数字,也没有给聚合属性设置初始值0,直接运算会得到NaN
  • 硬编码键名错误:"toBeKeysArray.seriesTempHeader"是固定字符串,无法动态获取每个项对应的实际键名
正确实现代码
// 初始化结果对象,先写入固定的category属性
const aggregateResult = { category: "None" };
// 构建id与处理后键名的映射表,同时初始化每个统计键的初始值为0
const idKeyMap = {};
toBeKeysArray.forEach(configItem => {
  // 按规则处理键名:移除所有空格后转为小写
  const statKey = configItem.seriesTempHeader.replace(/\s/g, '').toLowerCase();
  idKeyMap[configItem.id] = statKey;
  aggregateResult[statKey] = 0;
});

// 遍历第一个数组做值累加
firstArray.forEach(dataItem => {
  const matchKey = idKeyMap[dataItem.col_id];
  // 仅处理col_id在统计范围内的项
  if (matchKey) {
    const dataValue = Number(dataItem.data);
    // 跳过无法转为有效数字的data,避免出现NaN结果
    if (!isNaN(dataValue)) {
      aggregateResult[matchKey] += dataValue;
    }
  }
});

// 按要求包装为数组格式
const targetArray = [aggregateResult];
效果验证

针对你给出的示例数据:

  1. 映射表会生成{17: "deerlast", 16: "blueitem"},初始结果对象为{category: "None", deerlast: 0, blueitem: 0}
  2. 遍历firstArray时,col_id=17的两个项data值10、32累加后deerlast为42;col_id=16的有效数字项累加后blueitem为80
  3. 最终输出完全符合要求:[{ "deerlast": 42, "blueitem": 80, "category": "None"}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:42:21