2015-09-21 117 views
1
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

斯里蘭卡戒,不要忘記,以關閉了一個問題,「接受」,以紀念您選擇的答案。 :) –

+1

@Joel,好的Joel。由於Iam新來堆棧,我不知道這一點。 –

+0

沒問題,隊友 - 歡迎來到SO! :) –

回答

0

Array.reduce()作品作爲回調迭代器,例如這樣的:

var x = [1, 2, 3]; 
var sumX = x.reduce(function(a, b) { return a + b; }); // 6 

它通過循環陣列,取元件對和其收縮到一個單一的元素。

隨着reduce,你的數組必須至少有兩個元素才能正確操作。可以以幾種方式控制這個(樣品asume一個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); 
+0

,謝謝! :-) –

0

交替使用不減少。例如用按鈕:

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

+0

爲什麼'arr = [total];'?數組縮減返回一個數字,而不是單個數字元素的數組。 –

+0

首先,因爲說明中說數組從arr = [10,1]加上35,32到數組,然後你有:arr = [11,35,32]。我只是讓陣列執行它被描述的方式。儘管這種方法並不需要它。其次,雖然使用的職位減少,他們想要一個總和輸出[輸出應該更新爲78(11 + 32 + 35)],因此我刪除了減少,因爲它似乎符合他們實際想要達到的。 (至少不是最簡單的方法) –

+0

@William,謝謝! :-) –