我想做一些例子。 我想总结数组的所有元素 这是我的代码
var marks = [10, 20, 30, 40];
var total = 0;
for (var singleMark in marks) {
total += marks;
}
console.log("the total marks re " + total);
但显示的结果是 总分为010,20,30,4010,20,30,4010,20,3010,20,30,40
请帮帮我,告诉我我在哪里做错了。谢谢。 我可以采用for循环,但我想学习使用 foreach ,如 Javascript中所说的明确指南
答案 0 :(得分:4)
试试这个
var marks = [10, 20, 30, 40];
var sum=marks.reduce(function(a, b){return a+b;})
来自 @thomas 评论
ES6语法你也可以写:
[10, 20, 30, 40].reduce((a,b) => a + b)
答案 1 :(得分:4)
for in将遍历对象的属性。如果您在数组中使用in,它将返回它迭代的索引。
您应该使用forEach
来迭代数组。
marks.forEach(function(element, index){
total+=element;
});
元素值是数组中的element
,而index
值是forEach当前所在的索引。 index
是可选的,不需要包含在内。
答案 2 :(得分:2)
为什么不使用常规for循环?
var marks = [10, 20, 30, 40];
var total = 0;
for (var i = 0, iLen = marks.length; i < iLen; i++) {
total += marks[i];
}
console.log("the total marks re " + total);
您也可以使用
reduce
。 reduce()方法对累加器和数组的每个值(从左到右)应用一个函数,将其减少为单个值。
var total = [0, 1, 2, 3].reduce(function(a, b) {
return a + b;
});
// total == 6
答案 3 :(得分:1)
不要使用for .. in
进行数组遍历。
使用for(..;..;..)
这些值以这种方式表示为字符串。
供参考,更安全的方式:
for(var i = 0; i< arr.length; i++){
sum += arr[i];
}
答案 4 :(得分:1)
you can use the following two ways
var marks = [10, 20, 30, 40];
var total = 0;
marks.forEach(function addNumbers(value) {
total += value;
});
console.log(total);
or
var marks = [10, 20, 30, 40];
var total = 0;
var singleMark;
for (var i = 0; i < marks.length;i++) {
total = total + marks[i];
}
console.log("the total marks re " + total);
答案 5 :(得分:1)
这是一种更高阶和可读的方法:
marks.reduce(Math.sum, 0);
reduce 函数与Math.sum一起使用并执行此操作:foreach元素标记,使用math.sum(cur, marks[i]);
获取当前元素和下一个元素;这样做,直到数组中的所有元素都传递给sum函数并且已经像这样添加了。希望这会有所帮助。
答案 6 :(得分:0)
您只是在循环中使用了错误的变量marks
而不是singleMark
。试试这个:
for (var singleMark in marks) {
total += marks[singleMark];
}
编辑:但是使用in
迭代数组是不好的做法。考虑使用.reduce()
或.forEach()
答案 7 :(得分:0)
很容易。
使用参数创建一个函数。
在函数循环中通过数组直到循环结束。
在循环内添加元素。
function sumArray(arra){
var sum=0;
for (var i = 0; i <arra.length; i++) {
sum= sum+arra[i];
}
}