【发布时间】:2015-06-12 14:35:12
【问题描述】:
arr将是一个数组,包含整数、字符串和/或类似自身的数组。将您找到的所有整数求和,在数组嵌套中的任何位置。
这是我想出来的,但仍然不正确
function arraySum(arr) {
var sum = 0;
var sum1 = 0;
for (var i = 0; i < arr.length; i++) {
if (arr[i] === Math.round(arr[i])) { //check if its an integar
sum += arr[i];
}
if (arr[i] instanceof Array) {
for (var n = 0; n < arr[i].length; n++) {
sum1 += arr[i][n];
}
}
}
console.log(sum + sum1);
}
var sumArr = [[[[[[[[[1]]]]]]]], 1]; // => 101. SHOULD BE 2
arraySum(sumArr);
【问题讨论】:
-
展平比求和更简单(都是单行运算),而且由于加法是关联和交流的,所以答案是一样的。
-
[[[[[[[[[1]]]]]]]], 1].toString().match(/[\d\.]+/g).map(Number).reduce(function(a,b){return a+b; }) -
我可能是错的,但我觉得你可能会从改变中受益:'if (arr[i] === Math.round(arr[i])) { //检查它是否integer ' to 'if(arr[i] === math.round(arr[i]) && isNaN(arr[i]) === false) { //检查它是否是一个整数并且是一个数字。 '
-
递归意味着函数调用自身。与其尝试对数组求和(可能还有更多嵌套数组),不如将数组传递给
arraySum,并将返回值添加到求和中。
标签: javascript for-loop recursion