2016-05-25 7 views
0

Ich habe Schleife wie folgt aus:Summe der Reihe gezählt Elemente dynamisch von JS/jQuery

while((numbers[0]+numbers[1]+numbers[2]+numbers[3]+numbers[4]+numbers[5]+numbers[6] 
     +numbers[7]+numbers[8]+numbers[9]+numbers[10]+numbers[11]+numbers[12]+numbers[13] 
     +numbers[14]+numbers[15]+numbers[16]+numbers[17]+numbers[18]+numbers[19]+numbers[20] 
     +numbers[21]+numbers[22]+numbers[23]+numbers[24]+numbers[25]+numbers[26]+numbers[27] 
     +numbers[28]+numbers[29]+numbers[30]+numbers[31]) != 0) 
    { 
     x=Math.floor((Math.random() * 32) + 0); 

     if (numbers[x]!=0) { 
      $('.board').append('<div class="tile" data-icon="icon'+(numbers[x])+'" data-end="no"></div>'); 
      numbers[x]=0; 
     } 
    } 

Ich will meine während Zustand mehr sexy machen. Ich brauche eine Summe von "Zahlen" -Elementen. In der Schleife ändern sich die Werte von Array-Elementen, also kann ich es nicht mit für Schleife zählen, dynamische Zählung ist notwendig. Funktioniert das irgendwie? Ich bin dankbar für jede Hilfe bei der Lösung meines Problems.

+0

Warum verwenden Sie nicht stattdessen 'Array.prototype.reduce'? Oder ein "forEach"? – evolutionxbox

Antwort

1

Sie können reduce für ein Array verwenden, um nacheinander eine Operation für jedes Element auszuführen und das Ergebnis der vorherigen Berechnung an das nächste Element zu übergeben. Dadurch können Sie das Array "summieren", indem Sie jeden Wert zu den vorherigen hinzufügen.

while(numbers.reduce(function(prev, curr) { 
    return prev + curr; 
}, 0)) { 
    // loop body 
} 

In es6 parlance, können Sie Fett Pfeil Syntax verwenden diese mehr succient zu machen:

while(numbers.reduce((p, c) => p + c, 0)) { 
    // loop body 
} 
+0

Dies wird in ES2015 noch kleiner. 'numbers.reduce ((a, b) => (a + b))' – evolutionxbox

+2

Tatsächlich tut es. Ich bin jedoch immer noch ein Fan davon, den Initialwert explizit zu übergeben –

2

Verwenden reduce() mit ES6 Pfeil Funktion in aktuellen Browser

while(numbers.reduce((a,b) => a+b) != 0) 

oder mit Funktion

while(numbers.reduce(function(a,b){ return a+b }) != 0) 

Für ältere Browser überprüfen polyfill option of reduce method.

Verwandte Themen