在我的数组结果中获取 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] 。
主要有两个问题:
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 循环结束时将 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 -1
是 NaN
而不是使用 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();
我正在创建一个函数来做一些微积分,结果将使用 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] 。
主要有两个问题:
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 循环结束时将 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 -1
是 NaN
而不是使用 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();