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

如何对两个嵌套数组按字符串键汇总累加数值

合并两个[字符串, 数值]结构数组并累加相同字符串的数值

给定两个由[字符串, 数值]组成的数组:

const first_arr = [["кстати", 1], ["скажем", 1], ["блин", 1], ["реально", 1], ["вообще", 1], ["допустим", 1], ["фактически", 1], ["получается", 1]];
const second_arr = [['кстати', 1], ['скажем', 2], ['реально', 3], ['вообще', 3], ['ладно', 5]];

需求是将相同字符串对应的数值累加,保留所有唯一字符串的元素,最终生成目标数组:

const final_arr = [["кстати", 2], ["скажем", 3], ["блин", 1], ["реально", 4], ["вообще", 4], ["допустим", 1], ["фактически", 1], ["получается", 1], ['ладно', 5]];

解决方案

高效实现(无严格顺序要求)

使用对象作为中间映射表处理累加,时间复杂度为O(n + m)(n、m为两个数组长度):

function mergeAndSumArrays(arr1, arr2) {
  const sumMap = {};

  // 累加第一个数组的数值
  for (const [key, val] of arr1) {
    sumMap[key] = (sumMap[key] ?? 0) + val;
  }

  // 累加第二个数组的数值
  for (const [key, val] of arr2) {
    sumMap[key] = (sumMap[key] ?? 0) + val;
  }

  // 转换为目标数组格式
  return Object.entries(sumMap);
}

// 调用示例
const result = mergeAndSumArrays(first_arr, second_arr);
console.log(result);

保留原顺序的实现

如果需要严格匹配目标数组的元素顺序(原数组元素在前,新增元素在后),可以用数组遍历判断的方式:

function mergeAndSumPreserveOrder(arr1, arr2) {
  const result = [...arr1];

  for (const [key, val] of arr2) {
    const existingItem = result.find(item => item[0] === key);
    if (existingItem) {
      existingItem[1] += val;
    } else {
      result.push([key, val]);
    }
  }

  return result;
}

// 调用示例
const orderedResult = mergeAndSumPreserveOrder(first_arr, second_arr);
console.log(orderedResult);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 00:15:37