在我的数组结果中获取 NaN 而不是值

gettin NaN instead of a value in my array result

我正在创建一个函数来做一些微积分,结果将使用 console.log 显示在导航器控制台上,但我遇到了 Array 结果的问题,该结果成功使用 arr.push(result) 将第一个结果添加到我的主要 Array,但其余结果显示为 NaN

这是代码:

function  Fibo() {
    var arr = [1, 2, 3];
    var result = 0;
    while(result < 4000000) {
          result = arr[arr.indexOf(arr.length)] + arr[arr.indexOf(arr.length - 1)];
          arr.push(result);
          console.log(arr);
          result = 0
    } 
}

Fibo();

这是结果:

[1, 2, 3, 5, NaN]
[1, 2, 3, 5, NaN, NaN]
[1, 2, 3, 5, NaN, NaN, NaN]
[1, 2, 3, 5, NaN, NaN, NaN, NaN]
[1, 2, 3, 5, NaN, NaN, NaN, NaN, NaN]
[1, 2, 3, 5, NaN, NaN, NaN, NaN, NaN, NaN]
[1, 2, 3, 5, NaN, NaN, NaN, NaN, NaN, NaN, NaN]
[1, 2, 3, 5, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN]
[1, 2, 3, 5, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN]

尝试在推送之前添加 NaN 检查

function  Fibo() {
    var arr = [1, 2, 3];
    var result = 0;
    while(result < 4000000) {
          result = arr[arr.indexOf(arr.length)] + arr[arr.indexOf(arr.length - 1)];
          if (isNaN(result)) { return }
          arr.push(result);
          console.log(arr);
          result = 0
    } 
}

在第二次循环中,arr.length === 4。这不是数组的元素,因此这是您的第一个问题。您可能想改用 arr[arr.length - 1] 。

主要有两个问题:

  1. indexOf 不是正确的使用方法。按照代码一步一步...

    arr[arr.indexOf(arr.length)] + arr[arr.indexOf(arr.length - 1)]
    arr[arr.indexOf(3)] + arr[arr.indexOf(2)]
    arr[2] + arr[1]
    3 + 2
    5
    
    arr[arr.indexOf(arr.length)] + arr[arr.indexOf(arr.length - 1)];
    arr[arr.indexOf(4)] + arr[arr.indexOf(3)]
    arr[-1] + arr[2]
    undefined + 2
    NaN
    
  2. 在 while 循环结束时将 result 设置为 0 将导致 while 循环进入 运行 无限循环!我的猜测是您正在清除变量,但要小心!

下面的代码解决了这两个问题(结果较低,只是作为完整性检查)

function Fibo() {
    var arr = [1, 2, 3];
    var result = 0;
    while(result < 400) {
          result = arr[arr.length-1] + arr[arr.length-2];
          if (isNaN(result)) { return }
          arr.push(result);
          console.log(arr);
    } 
}

Fibo();

当您将 5 添加到您的数组时它会中断,这就是发生的情况。您的数组现在长度为 4。
你的数组中没有 4 所以 arr.indexOf(arr.length)-1.
arr[-1]undefined
undefined -1NaN

而不是使用 indexOf,您只想添加列表中的最后 2 个数字并将其添加到末尾。

function  Fibo() {
var arr = [1, 2];
var result = 0;
while(result < 100) {
      result = arr[arr.length -1] + arr[arr.length -2];
      arr.push(result);
      console.log(arr);
  }
}

Fibo();