在JS函数中使用递归的怪异循环

时间:2018-08-27 00:17:09

标签: javascript recursion

我正在尝试对嵌套数组中的元素求和。例如arraySum([1,[2,3],5,[[4]]])应该返回15

除我尝试return array.pop() + arraySum(array)之外,其他所有事情似乎都没问题。

一切顺利,直到代码到达该代码为止。我试图返回数组的值,但我完全看不到任何问题。

谁能告诉我我的代码出了什么问题?

var arraySum = function(array) {
  
  if(array.length === 0){
      return 0
    }
  if(Array.isArray(array[array.length - 1])){
    var x = array[array.length - 1].reduce((accumulator, currentValue) => accumulator + currentValue);

    array.pop()
    array.push(x)
    return arraySum(array)

    }       

  return  array.pop() + arraySum(array)
};

console.log(arraySum([1,[2,3],5,[[4]]]))

1 个答案:

答案 0 :(得分:1)

一些热烈的递归在这里解决了我们的问题。问题是您在对数组进行迭代的同时对其进行了变异,特别是将项目推回了数组。实际上,您绝对不应这样做。

    function arraySum(array) {
      if (array.length === 0) {
        return 0;
      }
      return array.reduce((previous, current) => {
        if (Array.isArray(current)) {
          return previous + arraySum(current);
        }
        return previous + current;
      }, 0);
    }

    console.log(arraySum([1, [2, 3], 5, [[4]]]));