当我运行该程序时,我最终以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)));
最佳答案
2件事:
您需要将for
函数中的sum
循环更改为< arrayLength
而不是<= arrayLength
。您正在处理以0索引开头的数组长度。
您需要从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
因此,当您使用数组的长度属性(
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)));
每个函数都带有参数,并仅返回结果。这样,您就可以更加“实用”了。