首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript 陣列分組求和:以第 2、3 位元素為鍵合併第 1 位數值

     編輯:程式設計綜合問答

輸入陣列:

[['1','a','b'], ['2','a','c'], ['2','a','b'], ['3','a','b'], ['2','a','c']]

需求:第 2、3 個元素相同時,將第 1 個元素(數值字串)相加,輸出:

[['6','a','b'], ['4','a','c']]

解法:物件鍵值累加

const arr = [['1','a','b'], ['2','a','c'], ['2','a','b'], ['3','a','b'], ['2','a','c']];
const map = {};

for (const [val, k1, k2] of arr) {
    const key = k1 + '|' + k2; // 組合鍵,避免直接拼接衝突
    map[key] = (map[key] || 0) + parseInt(val, 10);
}

const result = Object.entries(map).map(([key, sum]) => {
    const [k1, k2] = key.split('|');
    return [String(sum), k1, k2];
});

console.log(result); // [['6','a','b'], ['4','a','c']]

關鍵點

  • 用 Map 或普通物件以「第2+第3元素」為鍵累加。
  • parseInt(val, 10) 確保數值相加而非字串拼接。
  • 輸出時將累加和轉回字串,保持原始格式。
  • 鍵分隔符用 | 或 \0 避免 'ab'+'c' === 'a'+'bc' 衝突。

一行函數式寫法 (ES6+)

const res = [...arr.reduce((m, [v, a, b]) => m.set(a+'|'+b, (m.get(a+'|'+b)||0)+ +v), new Map())]
    .map(([k, v]) => [String(v), ...k.split('|')]);

掌握「分組鍵組合 + 累加器」模式,可高效處理各類陣列聚合需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved