我正在创建一个函数来进行一些微积分,结果将使用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]
答案 0 :(得分: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
在while循环结束时将结果设置为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();
答案 1 :(得分:1)
当您将5添加到数组时,它会中断,以及发生了什么。您的阵列现在长度为4.
您的数组中没有4,因此arr.indexOf(arr.length)
为-1
arr[-1]
是undefined
undefined -1
为NaN
您只想在列表中添加最后两个数字,并在末尾添加广告,而不是使用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]。