Closed. This question needs debugging details。它当前不接受答案。
                        
                    
                
            
        
            
        
                
                    
                
            
                
                    想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                
                    2年前关闭。
            
        

    

我试图对嵌套数组中的元素求和。例如,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]]]))

最佳答案

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



    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]]]));

09-25 18:32