对于分配,我需要使用递归求和一个数组数组,即:(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));
};
此外,作为赋值的一部分,我无法向该函数添加额外的参数。谢谢。
请尝试这个
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));
[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));
错误是有一个错字,其中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));
};