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

如何在DataWeave中用另一数组选择性更新对象数组中count=1的字段

数组更新解决方案:仅替换指定条件对象并保留顺序

需求说明

  • 仅更新Array 1中count值为1的对象
  • 用Array 2中**name字段匹配**的对象覆盖对应字段
  • 严格保留Array 1的原始顺序
  • 注意:Array 2中的count为字符串类型,需转为数字以匹配Array 1的类型

解决方案思路

  1. 将Array 2转换为以name为键的映射对象,实现O(1)时间复杂度的快速查找
  2. 遍历Array 1,对每个对象做如下处理:
    • 若对象count≠1,直接保留原对象
    • 若对象count=1,从映射中取出对应name的对象,合并覆盖字段(同时转换count类型)
  3. 返回处理后的新数组(不修改原数组)

代码实现(JavaScript)

const array1 = [
  {
    "count": 3,
    "classification": "Group",
    "id": "",
    "name": "A3200003"
  },
  {
    "count": 1,
    "classification": "Group",
    "id": "",
    "name": "A4000006"
  },
  {
    "count": 1,
    "classification": "Group",
    "id": "",
    "name": "A5E02528190"
  }
];

const array2 = [
  {
    "count": "1",
    "classification": "Hardware",
    "id": "34265711",
    "name": "A4000006"
  },
  {
    "count": "1",
    "classification": "Hardware",
    "id": "127029226",
    "name": "A5E02528190"
  }
];

// 构建Array2的name映射,同时转换count为数字类型
const array2NameMap = array2.reduce((map, item) => {
  map[item.name] = {
    ...item,
    count: Number(item.count)
  };
  return map;
}, {});

// 处理Array1生成结果
const updatedArray = array1.map(obj => {
  if (obj.count !== 1) {
    return {...obj}; // 返回原对象副本,避免污染原数组
  }
  // 合并原对象与映射中的匹配对象,覆盖字段
  return {...obj, ...array2NameMap[obj.name]};
});

// 输出结果
console.log(JSON.stringify(updatedArray, null, 2));

输出结果

[
  {
    "count": 3,
    "classification": "Group",
    "id": "",
    "name": "A3200003"
  },
  {
    "count": 1,
    "classification": "Hardware",
    "id": "34265711",
    "name": "A4000006"
  },
  {
    "count": 1,
    "classification": "Hardware",
    "id": "127029226",
    "name": "A5E02528190"
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:01:08