减少数组

Reducing an Array

本文关键字:数组      更新时间:2023-09-26
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个元素时,第一次显示Total但是当arr后面的两个元素(35和32)时,total将显示为NaN。请救救我!!

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,则意味着数组包含单个元素。

  • 检查数组的长度是否>= 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);

不使用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>