Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多维数组递归求和_Javascript_Recursion - Fatal编程技术网

Javascript 多维数组递归求和

Javascript 多维数组递归求和,javascript,recursion,Javascript,Recursion,我想在JavaScript中求多维数组的总和,但是它没有提供正确的值,因为嵌套数组与总和连接在一起。下面是我的代码: var arr = [1, 2, 3, [4, 3], [10, 50], 98, 100]; function recursion(array, length = 0) { if (array.length === length) return 0; if (Array.isArray(array[length])) {

我想在JavaScript中求多维数组的总和,但是它没有提供正确的值,因为嵌套数组与总和连接在一起。下面是我的代码:

    var arr = [1, 2, 3, [4, 3], [10, 50], 98, 100];

    function recursion(array, length = 0) {
        if (array.length === length) return 0;

        if (Array.isArray(array[length])) {
            recursion(array[length]);
        }
        console.log(array[length]);

        return array[length] + recursion(array, length + 1);
    }

    console.log(recursion(arr));
错误可以在下面的屏幕截图中看到,这是谷歌chrome的控制台。 您缺少报税表:

另外,我建议将参数名称从length改为其他位置,以避免与数组的length属性混淆。

您缺少一个返回:

另外,我建议将参数名称从length改为其他位置,以避免与数组的length属性混淆。

函数sume{//获取一个元素,如果它不是数组,则返回它;如果它是数组,则返回递归和 数组{//的ife实例如果是数组 返回e.reducefunctions,e{//对数组的每个项调用sum并返回累计和 返回s+sume; }, 0; } else//else如果不是数组,则返回该项 返回e; } var-arr=[1,2,3,4,3,10,50,98100]; console.logsumarr 函数sume{//获取一个元素,如果它不是数组,则返回它;如果它是数组,则返回递归和 数组{//的ife实例如果是数组 返回e.reducefunctions,e{//对数组的每个项调用sum并返回累计和 返回s+sume; }, 0; } else//else如果不是数组,则返回该项 返回e; } var-arr=[1,2,3,4,3,10,50,98100];
console.logsumarr 另一种方法是使用reduce

var-arr=[1,2,3,4,3,10,50,98100]; 函数递归数组{ 返回array.reduceFunction,e{ 返回r+=Array.isArraye?递归:e }, 0 } console.logrecursiator;
console.logrecursion[1,1,2,2] 另一种方法是使用reduce

var-arr=[1,2,3,4,3,10,50,98100]; 函数递归数组{ 返回array.reduceFunction,e{ 返回r+=Array.isArraye?递归:e }, 0 } console.logrecursiator;
console.logrecursion[1,1,2,2] 你甚至不需要一个函数。该功能内置于阵列原型中

常数arr=[1,2,3,4,3,10,50,98100] const sum=[].concat…arr.reduceacc,curr=>acc+curr
logsum你甚至不需要一个函数来实现这个。该功能内置于阵列原型中

常数arr=[1,2,3,4,3,10,50,98100] const sum=[].concat…arr.reduceacc,curr=>acc+curr
控制台。logsum不需要递归。您可以使用.toString、.split、.reduce

var-arr=[1,2,3,4,3,10,50,98100]; var n=arr.toString.split/,/.reducefunctiona,b{return+a++b};
console.logn 递归不是必需的。您可以使用.toString、.split、.reduce

var-arr=[1,2,3,4,3,10,50,98100]; var n=arr.toString.split/,/.reducefunctiona,b{return+a++b};
console.logn;第一个问题是JavaScript不支持默认函数参数。至少不是以代码中的方式。看看是否不需要递归,您可以更简单地使用concat和reduce:[].concat…arr.reducea,b=>a+b@StephenThomas注意,javascript确实支持默认参数。您遇到的第一个问题是javascript不支持默认函数参数。至少不是以代码中的方式。看看是否不需要递归,您可以更简单地使用concat和reduce:[].concat…arr.reducea,b=>a+b@StephenThomas注意,javascript确实支持默认参数。这是一个非常好的解决方案。你能告诉我三个点的概念是什么吗?朋友,这是一个很棒的解决方案。你能告诉我三点的概念是什么吗?
...
if (Array.isArray(array[length])) {
    return recursion(array[length]);
}
...