簡體   English   中英

使用JavaScript在二維數組中添加值

[英]Add values in a two-dimensional array with JavaScript

我想合並並添加以下2D數組:

var arr = [
    ["TWENTY", 20],
    ["TWENTY", 20],
    ["TWENTY", 20],
    ["TWENTY", 20],
    ["TEN", 10],
    ["FIVE", 5],
    ["ONE", 1],
    ["QUARTER", 0.25],
    ["QUARTER", 0.25],
    ["DIME", 0.1],
    ["DIME", 0.1],
    ["PENNY", 0.01],
    ["PENNY", 0.01],
    ["PENNY", 0.01],
    ["PENNY", 0.01]
    ];

導致2D數組看起來像這樣:

 arr = [
     ["TWENTY", 80],
     ["TEN", 10],
     ["FIVE", 5],
     ["QUARTER", 0.50],
     ["DIME", 0.20],
     ["PENNY", 0.04]
     ];

基本上我將數值加起來並壓縮字符串值。 我試過map,reduce和for循環,但這個讓我難過。

你有一個包含key, value元組的數組。 您可以遍歷這些元組,將每個新密鑰存儲在一個對象中,並在后續元組使用相同的密鑰時增加該值。 如果按照遇到它們的順序保留一組鍵,則可以將鍵數組映射到結果數組。

但是當你可以使用Nit的答案中所示的純功能方法時,解決所有這些麻煩是愚蠢的。

以下是丑陋的方法。 不要這樣做。 做什么Nit說。

 function addArray(tuples) { var hash = {}, keys = []; tuples.forEach(function (tuple) { // Iterate over [key, value] tuples. var key = tuple[0], value = tuple[1]; if (hash[key] === undefined) { // Is it a new key? keys.push(key); // Then add it to keys. hash[key] = value; // And set the initial value. } else { hash[key] += value; // Otherwise, increment the value. } }); return keys.map(function (key) { // Map the keys to tuples. return([key, hash[key]]); }); }; var arr = [ ["TWENTY", 20], ["TWENTY", 20], ["TWENTY", 20], ["TWENTY", 20], ["TEN", 10], ["FIVE", 5], ["ONE", 1], ["QUARTER", 0.25], ["QUARTER", 0.25], ["DIME", 0.1], ["DIME", 0.1], ["PENNY", 0.01], ["PENNY", 0.01], ["PENNY", 0.01], ["PENNY", 0.01] ]; var added = addArray(arr); added.forEach(function (tuple) { document.write(JSON.stringify(tuple) + '<br />'); }); 

你真正需要的只是一個簡化和一個地圖,這可能會加起來很好的MapReduce笑話。

var arr = [
    ["TWENTY", 20],
    ["TWENTY", 20],
    ["TWENTY", 20],
    ["TWENTY", 20],
    ["TEN", 10],
    ["FIVE", 5],
    ["ONE", 1],
    ["QUARTER", 0.25],
    ["QUARTER", 0.25],
    ["DIME", 0.1],
    ["DIME", 0.1],
    ["PENNY", 0.01],
    ["PENNY", 0.01],
    ["PENNY", 0.01],
    ["PENNY", 0.01]
];
var obj = arr.reduce(function (out, el) {
    out[el[0]] = (out[el[0]] || 0) + el[1];
    return out;
}, {});
var out = Object.keys(obj).map(function (key) {
    return [key, obj[key]]
}); //[["TWENTY",80],["TEN",10],["FIVE",5],["ONE",1],["QUARTER",0.5],["DIME",0.2],["PENNY",0.04]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM