[英]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.