var x=Math.random();
x=x*600;
var k=0;
var total;
var arr=[];
if(k<10){
k++;
arr.push(x);
}
if(k%2==0){
var tot=arr.reduce(function(a,b){
total=a+b;
document.getElementById("a").innerHTML=total;
}
}
在上面的代码中,arr存储x的随机值(最多10个值)。 我想在存储两个元素后显示元素的总和。 例如, 如果arr = [10,1] 然后我希望总数为11,当接下来的两个元素(35和32)添加到数组时 ARR = [11,35,32] 我希望总数更新为78。 当arr有2个元素时,第一次显示总数 但是当arr(35和32)的下两个元素时,总数显示为NaN。 请帮助我!!
答案 0 :(得分:0)
Array.reduce()
用作回调迭代器,例如:
var x = [1, 2, 3];
var sumX = x.reduce(function(a, b) { return a + b; }); // 6
它循环遍历数组,获取元素对并将它们缩小为单个元素。
使用reduce
,您的数组必须至少有两个元素才能正常运行。您可以通过多种方式控制它(样本为arr
数组存在):
强制数组至少包含2个元素:
var sum = arr.concat([0, 0]).reduce(function(a, b) { return a + b; });
验证b
是否为数字:
var sum = arr.reduce(function(a, b) { return isNaN(b) ? a : (a + b); });
在这种情况下,无需验证a
,因为如果isNaN(b) === true
意味着数组包含单个元素。
检查数组的长度为&gt; = 2:
var sum = arr.length >= 2
? arr.reduce(function(a, b) { return a + b; })
: (arr[0] || 0);
在您的情况下,10个元素的随机和减少的数组将如下所示:
var n = 10;
var arr = [];
var sum = 0;
while (arr.length < n) {
arr.push(parseInt(Math.random() * 100));
}
sum = arr.reduce(function(a, b) { return a + b; });
alert(sum);
答案 1 :(得分:0)
在不使用reduce的情况下替换。按钮示例:
<html>
<head>
<script type='text/javascript'>
var k=0;
var total;
var arr=[];
function go()
{
var x=Math.random();
x=x*600;
if(k<10){
k++;
arr.push(x);
}
if(k%2==0)
{
var total = 0;
for( i = 0; i < arr.length; i++ )
{
total += arr[i];
}
document.getElementById("a").innerHTML = total;
arr = [total];
}
}
</script>
</head>
<body>
<div id='a'></div>
<input type='button' onclick='go();' value='go' />
</body>