我有一个问题,我必须对数组中的数字求和,除了在一种情况下我做的工作正常:
sum([1, [2, 3, [4, 5], 6], 7, [8, 9]]) === 45
function sum(arr) {
var arrsum = 0;
for (var index = 0; index < arr.length; index++) {
if (!isNaN(arr[index])) {
arrsum += arr[index];
}
}
return arrsum;
}
这个的结果是8,你知道如何通过改变功能来使它成为45吗? 非常感谢。
答案 0 :(得分:2)
当数组中的每个项本身就是一个数组时,你需要计算内部数组的总和:
function sum(array){
var total = 0;
for(var i = 0; i < array.length; i++){
var item = array[i];
if(item.constructor == Array){ //It is an array
total += sum(item);
}else{
total += item;
}
}
return total;
}
var array = [1, [2, 3, [4, 5], 6], 7, [8, 9]];
var result = sum(array);
console.log(result);
&#13;
答案 1 :(得分:2)
关键是在第一个数组中找到另一个数组时使你的函数递归。
console.log(sum([1, [2, 3, [4, 5], 6], 7, [8, 9]])); // === 45
function sum(arr) {
var result = 0; // answer will go here
// This function will do the looping over all arrays
function loop(ary){
arr.forEach(function(element){
// If the item is a number...
if(typeof element === "number"){
result += element; // Add it to the total
} else if(typeof element === "object"){
// If it's an object (Array in this case), run the function recusively
result += sum(element);
}
});
}
loop(arr);
return result;
}