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

Mule 4中基于另一对象数组更新目标对象数组的需求

问题描述

需要基于Input 1数组的数值,更新Input 2数组中的对象属性值,具体规则如下:

  • 当两个数组中对象的id匹配时:
    • 对于FieldName2:若当前值为非0的key(如Dummy1),则用Input 1中同id且key匹配的value替换;若Input 1中无对应key,则使用该对象自身的FieldValue
    • 对于FieldName3:若当前值为非0的key(如Dummy2),则用Input 1中同id且key匹配的value替换;若值为0则保持不变

输入示例

Input 1

[
        {
                "id": 123,
                "key": "Dummy1",
                "value": "20"
        },
        {
                "id": 123,
                "key": "Dummy2",
                "value": "50"
        },
        {
                "id": 123,
                "key": "Dummy3",
                "value": "100"
        },
        {
                "id": 789,
                "key": "Dummy2",
                "value": "40"
        },
        {
                "id": 789,
                "key": "Dummy3",
                "value": "90"
        }
]

Input 2

[
        {
                "id": 123,
                "FieldName": "Dummy1",
                "FieldValue": "20",
                "FieldName2": "Dummy1",
                "FieldName3": "0"
        },
        {
                "id": 123,
                "FieldName": "Dummy1",
                "FieldValue": "20",
                "FieldName2": "Dummy1",
                "FieldName3": "Dummy2"
        },
        {
                "id": 789,
                "FieldName": "Dummy1",
                "FieldValue": "10",
                "FieldName2": "Dummy1",
                "FieldName3": "0"
        },
        {
                "id": 789,
                "FieldName": "Dummy1",
                "FieldValue": "10",
                "FieldName2": "Dummy1",
                "FieldName3": "Dummy2"
        }
]

预期输出

[
        {
                "id": 123,
                "FieldName": "Dummy1",
                "FieldValue": "20",
                "FieldName2": "20",
                "FieldName3": "0"
        },
        {
                "id": 123,
                "FieldName": "Dummy1",
                "FieldValue": "20",
                "FieldName2": "20",
                "FieldName3": "50"
        },
        {
                "id": 789,
                "FieldName": "Dummy1",
                "FieldValue": "10",
                "FieldName2": "10",
                "FieldName3": "0"
        },
        {
                "id": 789,
                "FieldName": "Dummy1",
                "FieldValue": "10",
                "FieldName2": "10",
                "FieldName3": "40"
        }
]
解决方案(JavaScript实现)

先把Input 1转换成按id分组的映射表,避免重复遍历数组影响效率,再遍历Input 2逐个更新字段。

// 把Input1转换成id -> {key: value}的映射
const buildIdKeyMap = (input1) => {
  return input1.reduce((map, item) => {
    if (!map[item.id]) {
      map[item.id] = {};
    }
    map[item.id][item.key] = item.value;
    return map;
  }, {});
};

// 按规则更新Input2数组
const updateTargetArray = (input1, input2) => {
  const idKeyMap = buildIdKeyMap(input1);
  return input2.map(item => {
    const currentIdMap = idKeyMap[item.id] || {};
    // 处理FieldName2
    let updatedField2 = item.FieldName2;
    if (updatedField2 !== '0') {
      updatedField2 = currentIdMap[updatedField2] || item.FieldValue;
    }
    // 处理FieldName3
    let updatedField3 = item.FieldName3;
    if (updatedField3 !== '0') {
      updatedField3 = currentIdMap[updatedField3] || updatedField3;
    }
    // 返回新对象,不修改原数组
    return {
      ...item,
      FieldName2: updatedField2,
      FieldName3: updatedField3
    };
  });
};

// 示例调用
const input1 = [/* 填入Input1的数组内容 */];
const input2 = [/* 填入Input2的数组内容 */];
const result = updateTargetArray(input1, input2);
console.log(result);

代码说明

  1. buildIdKeyMap函数:将Input1转换为{ id: { key: value } }的结构,比如123: { Dummy1: '20', Dummy2: '50' },后续可以直接通过id和key快速取值。
  2. updateTargetArray函数:
    • 遍历Input2的每个对象,根据id获取对应的key-value映射
    • 对FieldName2:非0值优先用映射中的对应value,没有则用自身的FieldValue
    • 对FieldName3:非0值用映射中的对应value替换,无对应值则保持原值
    • 返回新数组,避免修改原输入数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:18:28