在if条件下的递归混淆,JS如何正确地解释"真实/错误"条件?

时间:2016-05-04 20:54:15

标签: 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;
  }
} 

然后在控制台:

数组选项 - 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

数组选项 - 5

  

分数= [1,2,3,4];   totalScores = addArray(0,得分); // 1 - ???

< 1

我可以通过使用" if(remainingList.length> 0)轻松修复..."在代码片段中,但我试图弄清楚在if条件中使用数组实际上是什么。 Javascript如何解释"真实" /" falsely"给出不同阵列选项的结果。我知道一个空数组[] = true,但我似乎不清楚该函数如何退出使用不同的数组选项。

2 个答案:

答案 0 :(得分:2)

将数组与常量标量 0 进行比较时会出现问题。如果列表中至少有3个元素,则会发生这种情况。此比较为 false ,并且例程返回其仅在第一个元素上计算的总和。

使用1个元素,您将剩余的列表作为null,返回第一个元素的值。使用2个元素,单元素尾部评估算法所需的方式,并返回两个元素的总和。

答案 1 :(得分:1)

我认为你打算写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;
  }
}