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

如何合并含嵌套Values的数组?实现对应项求和与属性拼接

嵌套结构数组的高效合并方案

需求说明

  • 两个数组对应索引项的嵌套Values数组中,每个对象的Input1、Input2值分别对应求和
  • Name字段进行字符串拼接(第一个数组项的Name在前,第二个在后)
  • key字段转为字符串后拼接,最终保留为数字类型

示例输入

const InputValues1 = [
    {
        "Values": [
            {"Input1": 1, "Input2": -1},
            {"Input1": 1, "Input2": -2},
            {"Input1": 2, "Input2": -2},
            {"Input1": 4, "Input2": -4}
        ],
        "Name": "AA",
        "key": 1
    },
    {
        "Values": [
            {"Input1": 1, "Input2": -2},
            {"Input1": 3, "Input2": 5},
            {"Input1": 3, "Input2": 2},
            {"Input1": 1, "Input2": -2}
        ],
        "Name": "AB",
        "key": 2
    }
];

const InputValues2 = [
    {
        "Values": [
            {"Input1": 3, "Input2": 2},
            {"Input1": 2, "Input2": 1},
            {"Input1": 1, "Input2": 1},
            {"Input1": 1, "Input2": 6}
        ],
        "Name": "BA",
        "key": 1
    },
    {
        "Values": [
            {"Input1": 30, "Input2": 1},
            {"Input1": 6, "Input2": 2},
            {"Input1": 1, "Input2": 2},
            {"Input1": 1, "Input2": 8}
        ],
        "Name": "BB",
        "key": 2
    }
];

期望输出

const CombinedOutput = [
    {
        "Values": [
            {"Input1": 4, "Input2": 1},
            {"Input1": 3, "Input2": -1},
            {"Input1": 3, "Input2": -1},
            {"Input1": 5, "Input2": 2}
        ],
        "Name": "AABA",
        "key": 11
    },
    {
        "Values": [
            {"Input1": 31, "Input2": -1},
            {"Input1": 9, "Input2": 7},
            {"Input1": 4, "Input2": 4},
            {"Input1": 2, "Input2": 6}
        ],
        "Name": "ABBB",
        "key": 22
    }
];    

高效实现方案

可以通过嵌套map函数实现,这种写法简洁且保持函数式风格,同时避免冗余循环代码,处理大规模数据时性能也能得到保障:

const combineArrays = (arr1, arr2) => {
    // 假设两个数组长度一致,需处理长度不一致的情况可额外添加判断
    return arr1.map((item1, index) => {
        const item2 = arr2[index];
        return {
            Values: item1.Values.map((val1, valIndex) => {
                const val2 = item2.Values[valIndex];
                return {
                    Input1: val1.Input1 + val2.Input1,
                    Input2: val1.Input2 + val2.Input2
                };
            }),
            Name: item1.Name + item2.Name,
            key: Number(String(item1.key) + String(item2.key))
        };
    });
};

// 调用示例
const CombinedOutput = combineArrays(InputValues1, InputValues2);
console.log(CombinedOutput);

代码说明

  1. 外层map遍历第一个数组的每一项,同时通过索引获取第二个数组对应位置的项
  2. 内层map处理嵌套的Values数组,对每个对象的Input1和Input2分别求和
  3. Name字段直接拼接两个数组对应项的Name值
  4. key先转为字符串拼接,再转回数字类型,符合示例要求

扩展说明

如果需要处理两个数组长度不一致的情况,可以在函数开头添加判断逻辑,比如只处理到较短数组的长度:

const combineArrays = (arr1, arr2) => {
    const minLength = Math.min(arr1.length, arr2.length);
    return arr1.slice(0, minLength).map((item1, index) => {
        const item2 = arr2[index];
        return {
            Values: item1.Values.map((val1, valIndex) => {
                const val2 = item2.Values[valIndex];
                return {
                    Input1: val1.Input1 + val2.Input1,
                    Input2: val1.Input2 + val2.Input2
                };
            }),
            Name: item1.Name + item2.Name,
            key: Number(String(item1.key) + String(item2.key))
        };
    });
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:27:49