减少数组

时间:2015-09-21 16:05:12

标签: javascript

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。     请帮助我!!

2 个答案:

答案 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>