2015-09-29 55 views
3

我在智慧的結尾處討論了在二維數組中添加數組的總和個人。例如:二維數組內的單個數組的總和

var arrArrays = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; 

function sumArray(numberArray) { 
    var sum = 0; 
    numberArray.forEach(function(a,b) { 
    sum = a + b; 
    }); 
    return sum; 
} 

功能sumArray可以成功地加起來&返回常規(一維陣列)的總和,但是,當通過arrArrays它返回隨機前瞻性值的單個陣列。

我會需要它能夠返回無論多個數組在另一個數組內的總和。是的原因是因爲我需要這個下一個函數調用sumArray():

function sumSort(arrayOfArrays) { 
    arrayOfArrays.sort(function(a,b) { 
    var sumArray1 = sumArray(a); 
    var sumArray2 = sumArray(b); 
    if (sumArray1 < sumArray2) { 
     return -1; 
    } else { 
     return 0; 
    } 
    }); 
} 

sumSort()的基礎上的數字的每個陣列內的總和將,理論上,命令陣列(降序從最高到最低) 。

任何提示將是真棒。先謝謝你!

+2

我不知道你想* *的參數[的forEach(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach )回調是,但他們不是你認爲他們是。在你的函數中,你是最後一個元素+最後一個元素的索引的總和,因爲'b'是*索引*。 –

+0

@ Mr.Llama:OPs代碼不起作用。 –

+1

@ Mr.Llama - 代碼似乎不適用於我。結果是「7,8,92」'。 –

回答

1

此方法將允許您處理任何嵌套深度的數組。首先,你會flatten the inner arrays,然後像往常一樣總結它們。如果您還希望它處理非嵌套數組,則可以在第一級添加檢查,如in this question所示。

var arrs = [[[[1]], [2, 3]], [4, 5, 6], [7, 8, 9]]; 
//https://stackoverflow.com/a/15030117/1470607 
function flatten(arr) { 
    return arr.reduce(function(flat, arr) { 
     return flat.concat(Array.isArray(arr) ? flatten(arr) : arr); 
    }, []); 
}; 
var sums = arrs.map(function(arr) { 
    return flatten(arr).reduce(function(sum, item) { 
     return sum + item; 
    }); 
}); //[6, 15, 24] 
+0

我不知道爲什麼我沒有看地圖()。這很有道理。謝謝! – Jose