Java使用递归求和数组的数组

问题描述 投票:0回答:3

对于分配,我需要使用递归求和一个数组数组,即:(arraySum([[1],[2,3],[[4]],5])= 15)。在控制台中,下面的代码有效,但是在mocha.js测试套件中,它表示“预期NaN等于15”。是否有任何理由可以在控制台中使用该功能但无法通过测试。 ps:测试套件已经使用了多年,所以我不认为测试有任何错误。

var arraySum = function(array) {
  if (array.length === 0) {
    return 0;
  }
  if (Array.isArray(array[0])) {
    var current = arraySum(array[0]);
    return Number(current + sum(array.slice(1)));
  }
  return array[0] + sum(array.slice(1));
};

此外,作为赋值的一部分,我无法向该函数添加额外的参数。谢谢。

javascript arrays recursion mocha
3个回答
0
投票

请尝试这个

let a=[[1],[2,3],[[4]],5];


function arraySum(arr){
  let sum=0;
  for(let i=0;i<arr.length;i++){
    if(Array.isArray(arr[i])){
      sum+=arraySum(arr[i]); 
    }else{
      sum+=arr[i];
    }
  }
  return sum;
}
console.log(arraySum(a));

0
投票

[flat()将线性化数组,然后可以使用reduce求和。

var arr = [[1],[2,3],[[4]],5];

var arraySum = (a) => a.flat(Infinity).reduce((t, v) => (t += v), 0)

console.log(arraySum(arr));

0
投票

错误是有一个错字,其中sum()应该是arraySum()。正确的代码如下:

var arraySum = function(array) {
  if (array.length === 0) {
    return 0;
  }
  if (Array.isArray(array[0])) {
    var current = arraySum(array[0]);
    return current + arraySum(array.slice(1));
  }
  return array[0] + arraySum(array.slice(1));
};
© www.soinside.com 2019 - 2024. All rights reserved.