Javascript函数(总结数组的元素)不起作用

时间:2018-03-07 14:29:54

标签: javascript

我创建一个函数(在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"

对不起我的英语。我不擅长:) 谢谢你的帮助...

4 个答案:

答案 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的类型为数字。

希望您明白为什么要获得NaNnumber

下面是正确代码的演示。

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 
  1. 如果至少有一个操作数是一个对象,则将其转换为原始值(字符串,数字或布尔值);
  2. 转换后,如果至少有一个操作数是字符串类型,则第二个操作数将转换为字符串并执行连接;
  3. 在其他情况下,两个操作数都转换为数字并执行算术加法。
  4. 如果两个操作数都是基本类型,则运算符检查是否至少有一个是字符串并执行连接。在其他情况下,它只是将所有内容转换为数字和总和。

    实施例: -

    var result = 12 + undefined; // NaN 
    

    说明:

    1. 12 + undefined(因为没有操作数是字符串,所以根据规则3将undefined转换为数字NaN)
    2. 12 + NaN(数字添加)
    3. NaN

答案 1 :(得分:2)

For-loop 的结束条件不正确,数组索引 0

成功

for (var i = 0; i < a.length; i++) {

return val代替result

<强>演示

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:0)

问题是return resultfor (var i = 0; i <= a.length; i++)。您必须分别使用return valfor (var i = 0; i < a.length; i++)

答案 3 :(得分:0)

使用reduce(ES5)在一行中编写 arrSum 函数而没有循环的另一种方法:

&#13;
&#13;
function arrSum(arr) {
 return arr.reduce((sum, x) => sum + x);
}

var testArr = [1, 2, 3, 4];
var pass = arrSum(testArr);
document.write(pass);
&#13;
&#13;
&#13;