Javascript if条件中的递归混淆,JS如何解释;“真/假”;条件
在以下递归代码段中:Javascript if条件中的递归混淆,JS如何解释;“真/假”;条件,javascript,arrays,recursion,Javascript,Arrays,Recursion,在以下递归代码段中: function addArray(total,array){ total += array[0]; remainingList = array.slice(1); if (remainingList > 0){ console.log(remainingList); return addArray(total,remainingList); } else { return total; } } 然后在控制台上:
function addArray(total,array){
total += array[0];
remainingList = array.slice(1);
if (remainingList > 0){
console.log(remainingList);
return addArray(total,remainingList);
}
else {
return total;
}
}
然后在控制台上:
阵列选项-1
得分=[1,2,3];
totalScores=addArray(0,分数);//1-
<1
阵列选项-2
得分=[1,2]totalScores=addArray(0,分数);//3-有意义 [2] <3 阵列选项-3 得分=[2,3,4]; totalScores=addArray(0,分数);//2- <2 阵列选项-4 得分=[2,3]; totalScores=addArray(0,分数);//5-有意义 [3] 五, 阵列选项-5 得分=[1,2,3,4]; totalScores=addArray(0,分数);//1- <1
我可以通过在代码片段中使用“if(remainingList.length>0)…”轻松地进行修复,但我正试图找出在if条件下仅使用数组的实际情况。Javascript如何解释给定不同数组选项的“真实”/“错误”结果。我知道空数组[]=true,但我似乎不清楚函数如何退出使用不同的数组选项 我认为您打算编写
if(remainingList.length>0)
,而不是if(remainingList>0)
。请注意,后者将数组与单个值进行比较,这实际上没有意义
function addArray(total,array){
total += array[0];
remainingList = array.slice(1);
if (remainingList.length > 0){
console.log(remainingList);
return addArray(total,remainingList);
}
else {
return total;
}
}
将数组与常量标量0进行比较时会出现问题。当列表中至少有3个元素时,就会发生这种情况。此比较为false,例程返回仅在第一个元素上计算的和
对于1元素,剩余的列表为null,返回第一个元素的值。对于两个元素,一个元素的尾部计算算法所需的方式,然后返回两个元素的总和。在这一行中
remainingList=array.slice(1)
,remainingList
是一个数组。因此,您将数组与标量进行比较。我不认为这是你想要的…是的-这让我的理解走上了正确的轨道。请记住接受你最喜欢的答案,这样才能正确地回避这个问题。你在贴出的答案中有解释和修正;你也可以自己发布一个综合答案并接受。我想他是在问“如果(remainingList>0)”是如何工作的,他知道这是错误的。正确:检查原始帖子的最后一段。绝对正确…+这就是问题所在,这会彻底解决问题。当原始数组中有3个或更多元素时,由于代码将切片后的剩余数组与标量进行比较,因此会出现“false”决定(remainingList>0),但微妙的区别(在创建混淆的地方)是当数组中只有2个元素开始时。第一个递归调用留下一个单元素尾部,它按照我期望的方式进行计算,并返回两个元素的总和。非常清晰简洁的解释-Tks