JavaScript 循环结束 NaN 用于数字加法

标签 javascript arrays

当我运行这个程序时,我最终得到 NaN ;我希望得到某种形式的解释,因为我很困惑!我有一种奇怪的感觉,它必须在范围内做一些事情......

https://jsfiddle.net/Smuggles/evj46a23/

var array = []

var range = function(start, end) {
  for (var count = start; count <= end; count++) {
    array.push(start);
    start += 1;
  }
  console.log(array);
}

var sum = function() {
  var result = 0
  var arrayLength = array.length
  for (var count = 0; count <= arrayLength; count++) {
    result += array[count]
    console.log(result);
  }
}

console.log(sum(range(1, 10)));

最佳答案

两件事:

  1. 您需要更改 forsum 中循环函数为< arrayLength而不是<= arrayLength 。您正在处理以 0 索引开头的数组长度。
  2. 您需要从 sum 返回结果功能

var array = [];

var range = function(start, end) {
  for (var count = start; count <= end; count++) {
    array.push(start);
    start += 1;
  }
};

var sum = function() {
  var result = 0;
  var arrayLength = array.length;
  for (var count = 0; count < arrayLength; count++) {
    result += array[count];
  }
  return result;
};

console.log(sum(range(1, 10)));

给定一个数组 [4,5,6] ,索引如下:

0: 4
1: 5
2: 6

因此,当您使用数组的 length 属性 ( 3 ) 时,您将引用一个不存在的索引,该索引将返回 undefined 。它尝试对未定义的值进行数学计算,这会导致 NaN 。这就是为什么你必须使用 < arrayLength .

<小时/>

函数式方法:

这将有助于使这些函数更加“纯粹”。无需在函数外部维护状态(使用 var array = [] ),只需从函数返回值即可:请参阅以下示例:

function range(start, end) {
  var arr = [];
  for (var i = start; i <= end; i++) {
    arr.push(i);
  }
  return arr;
}

function sumArray(array) {
  return array.reduce(function(a, b) {
    return a + b;
  });
}

console.log(sumArray(range(1, 10)));

每个函数都接受参数,并简单地返回结果。这样,您就可以更加“实用”地处理这个问题。

关于JavaScript 循环结束 NaN 用于数字加法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41819702/

相关文章:

php - 如何创建 JSON (jQuery),发布整个数组

javascript - 将数组与错误合并为单一类型

ruby - 搜索 Ruby 数组中是否存在某个值

javascript - 为什么使用 "!= null"测试参数是否传递不好

javascript - 代码未在 Javascript 模块类型脚本源内执行 [ES6]

javascript - 无法检测空段落

c - 在c中打印锯齿状数组

javascript - 未定义随机数组

arrays - 自定义单元格在 TableView 中全白

c++ - 在 C++ 中初始化一个 const 多维数组