gettin NaN而不是我的数组结果中的值

时间:2015-02-10 23:30:53

标签: javascript arrays nan

我正在创建一个函数来进行一些微积分,结果将使用console.log显示在导航器控制台上,但是我遇到了Array结果的问题,该结果成功添加了使用Array向我的主arr.push(result)发送第一个结果,但其余部分显示为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]

4 个答案:

答案 0 :(得分: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循环结束时将结果设置为0将导致while循环在无限循环中运行!我的猜测是你要清除变量,但要小心!

  3. 以下代码修复了这两个问题(结果只是一个健全性检查结果)

    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();
    

答案 1 :(得分:1)

当您将5添加到数组时,它会中断,以及发生了什么。您的阵列现在长度为4.
您的数组中没有4,因此arr.indexOf(arr.length)-1 arr[-1]undefined undefined -1NaN

您只想在列表中添加最后两个数字,并在末尾添加广告,而不是使用indexOf。

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();

答案 2 :(得分:0)

尝试在推送之前添加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
    } 
}

答案 3 :(得分:0)

第二次围绕循环,arr.length === 4.这不是你的数组的元素,所以这是你的第一个问题。您可能希望使用arr [arr.length - 1]。