var nestedArr3 = [[[1,2],[3,4]],[[5,6]]];
function sumTotal() {
var sum = 0;
for (var i = 0; i < nestedArr3.length; i++) {
for (var j = 0; j < nestedArr3[i].length; j++) {
if (typeof nestedArr3[i][j] === "number") {
sum += nestedArr3[i][j];
} else if (Array.isArray(nestedArr3[i][j] === true)) {
sumTotal(nestedArr3[i][j]);
}
}
}
return console.log(sum);
}
console.log(sumTotal());
我得到的结果是0。我不知道如何解决此代码。任何帮助,将不胜感激。
答案 0 :(得分:5)
一些问题:
如果要尝试使用递归解决方案,最好只在再次调用sumTotal
之前尝试递归一个元素,否则您将重复(WET)代码
使用递归时,您需要最后return
以便调用者可以访问结果
Array.isArray(nestedArr3[i][j] === true))
看起来像是一个错字-将true
通话中的Array.isArray
外面移出
这是工作代码:
var nestedArr3=[[[1,2],[3,4]],[[5,6]]]
function sumTotal(arr) {
var sum = 0;
for (var i = 0; i < arr.length; i++) {
if (typeof arr[i] === "number") {
sum += arr[i];
} else if (Array.isArray(arr[i])) {
sum += sumTotal(arr[i]);
}
}
return sum;
}
console.log(sumTotal(nestedArr3));
但是,假设所有元素和子元素都是数字或数组,则使用reduce
会更清洁。
var nestedArr3=[[[1,2],[3,4]],[[5,6, [[100, 100, [100]]] ]]]
const sumTotal = (arr) => arr.reduce(
(a, element) => a + (
typeof element === 'number' ? element : sumTotal(element)
),
0
);
console.log(sumTotal(nestedArr3));
答案 1 :(得分:1)
@Jiajie Xu ,如果您正在使用递归来使用此代码获取 sum ,请不要这样做。我对其进行了更改以使其正常运行。请看看。
始终确保编写一个 reusable 函数,这就是为什么这里将1个参数作为数组的原因。
我使用了 filter()方法来获取数组元素的总和。检查
Legendre's three-square theorem了解详情。
function sumTotal(nestedArr3) {
sum = 0
for(var i = 0; i < nestedArr3.length; i++) {
if(typeof nestedArr3[i] === "number"){
return nestedArr3.reduce((num1, num2) => num1 + num2);
} else
if(Array.isArray(nestedArr3[i]) === true){
sum += sumTotal(nestedArr3[i]);
}
}
return sum
}
// TEST
var nestedArr3 = [[[1,2],[3,4]],[[5,6]]];
console.log(sumTotal(nestedArr3)) // 21
答案 2 :(得分:0)
首先,您需要展平阵列。我从Mozilla
使用此功能function flattenDeep(arr1) {
return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []);
}
从那里,您可以只使用reduce
var result = flattenDeep(nestedArr3).reduce((a,c) => a+c);
答案 3 :(得分:0)
如果只想使用for循环来解决它,就缺少数组的额外维度。解决方案应该是这样的:
function total(array) {
var sum = 0
for (var i = 0; i < array.length; i++) {
for (var j = 0; j < array[i].length; j++) {
for (var k = 0; k < array[i][j].length; k++) {
if (typeof array[i][j][k] === 'number') {
sum += array[i][j][k]
}
}
}
}
return sum
}
console.log(total([[[1,2],[3,4]],[[5,6]]]))
答案 4 :(得分:0)
使用.join()展平数组,然后使用.reduce() :
求和
var nestedArr3 = [[[1,2],[3,4]],[[5,6]]];
var sum = nestedArr3.join().split(',').reduce((total, curr) => {
return total + +curr // +curr is shorthand for parseInt
}, 0)
console.log(sum);