如何对相同id的JSON对象的value值求和并合并数组?
合并两个JSON数组并对相同ID的Value求和
要实现将两个独立JSON数组中拥有相同id的对象的value值求和,并合并为一个数组,核心思路是用映射结构(比如JavaScript的Map或Python的字典)跟踪每个id对应的累计值,遍历两个数组完成累加后,再将映射转换回数组形式。
示例数据
第一个数组:
[ {"id": 1, "value": 3}, {"id": 2, "value": 5}, {"id": 3, "value": 2} ]
第二个数组:
[ {"id": 1, "value": 2}, {"id": 2, "value": 3}, {"id": 4, "value": 2} ]
JavaScript实现
const arr1 = [ {"id": 1, "value": 3}, {"id": 2, "value": 5}, {"id": 3, "value": 2} ]; const arr2 = [ {"id": 1, "value": 2}, {"id": 2, "value": 3}, {"id": 4, "value": 2} ]; function mergeAndSum(arrA, arrB) { const resultMap = new Map(); // 初始化第一个数组的映射 arrA.forEach(item => { resultMap.set(item.id, {...item}); }); // 遍历第二个数组,累加相同id的value arrB.forEach(item => { if (resultMap.has(item.id)) { resultMap.get(item.id).value += item.value; } else { resultMap.set(item.id, {...item}); } }); // 将映射转换为数组返回 return Array.from(resultMap.values()); } const mergedResult = mergeAndSum(arr1, arr2); console.log(mergedResult);
执行后得到期望结果:
[ {"id": 1, "value": 5}, {"id": 2, "value": 8}, {"id": 3, "value": 2}, {"id": 4, "value": 2} ]
Python实现
用Python处理时逻辑类似,用字典作为映射:
arr1 = [ {"id": 1, "value": 3}, {"id": 2, "value": 5}, {"id": 3, "value": 2} ] arr2 = [ {"id": 1, "value": 2}, {"id": 2, "value": 3}, {"id": 4, "value": 2} ] def merge_and_sum(arr_a, arr_b): result_dict = {} # 处理第一个数组 for item in arr_a: result_dict[item["id"]] = item.copy() # 处理第二个数组,累加value for item in arr_b: if item["id"] in result_dict: result_dict[item["id"]]["value"] += item["value"] else: result_dict[item["id"]] = item.copy() return list(result_dict.values()) merged_result = merge_and_sum(arr1, arr2) print(merged_result)
方案优势
- 时间复杂度为O(n+m),n和m分别是两个数组的长度,处理效率高;
- 支持扩展到多个数组(只需添加更多数组的遍历逻辑);
- 保留所有出现过的
id,不会遗漏任何数据。
内容的提问来源于stack exchange,提问作者Ali Nato
相关产品推荐
相关产品推荐

