我创建一个函数(在javascript中)来对数组的元素求和并返回结果... 但是有一个问题,这个功能的输出是“NaN” 但是当我检查变量的类型时,那就是“数字”:| 请帮我解决这个问题......
function arrSum(a) {
var val = 0;
for (var i = 0; i <= a.length; i++) {
val += a[i];
}
return val;
}
var testArr = [1, 2, 3, 4];
var pass = arrSum(testArr);
document.write(pass);
// SHOW "NaN"
function arrSum(a) {
var val = 0;
for (var i = 0; i <= a.length; i++) {
val += a[i];
}
return val;
}
var testArr = [1, 2, 3, 4];
var pass = arrSum(testArr);
document.write(typeof pass);
// SHOW "number"
对不起我的英语。我不擅长:) 谢谢你的帮助...
答案 0 :(得分:3)
非常简单的语法(对于数组求和)。
var test = [ 1, 2, 3, 4 ];
sum = eval( test.join("+") ); //join will return string which is '1+2+3+4' and eval will evaluate it and give result which is sum of numbers.
console.log(sum);
你是returning result
,但你的总和在val
。
循环条件也是incorrect
。
您获得NaN
的原因是因为在上次迭代时您正在执行number
+ undefined
,这将导致NaN
并且NaN
的类型为数字。
希望您明白为什么要获得NaN
和number
。
下面是正确代码的演示。
function arrSum(a) {
var val = 0;
for (var i = 0; i < a.length; i++) {
val += a[i];
}
return val;
}
var testArr = [1, 2, 3, 4];
var pass = arrSum(testArr);
document.write(pass);
了解更多信息
转换规则
operand + operand = result
如果两个操作数都是基本类型,则运算符检查是否至少有一个是字符串并执行连接。在其他情况下,它只是将所有内容转换为数字和总和。
实施例: -
var result = 12 + undefined; // NaN
说明:
12 + undefined
(因为没有操作数是字符串,所以根据规则3将undefined转换为数字NaN)12 + NaN
(数字添加)NaN
答案 1 :(得分:2)
For-loop 的结束条件不正确,数组索引 0
成功
for (var i = 0; i < a.length; i++) {
return
val代替result
。
<强>演示强>
function arrSum(a) {
var val = 0;
for (var i = 0; i < a.length; i++) {
val += a[i];
}
return val; //observe this line
}
var testArr = [1, 2, 3, 4];
var pass = arrSum(testArr);
console.log(pass);
&#13;
答案 2 :(得分:0)
问题是return result
和for (var i = 0; i <= a.length; i++)
。您必须分别使用return val
和for (var i = 0; i < a.length; i++)
。
答案 3 :(得分:0)
使用reduce(ES5)在一行中编写 arrSum 函数而没有循环的另一种方法:
function arrSum(arr) {
return arr.reduce((sum, x) => sum + x);
}
var testArr = [1, 2, 3, 4];
var pass = arrSum(testArr);
document.write(pass);
&#13;