Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript if条件中的递归混淆,JS如何解释;“真/假”;条件_Javascript_Arrays_Recursion - Fatal编程技术网

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