2016-09-09 6 views
-2

Ich habe ein Array mit mehreren Objekten. Meine App verfügt über eine Option zum Filtern der Objekte und zum Zurückgeben des gefilterten Arrays. DieseAngular 2 entfernen mehrere Objekte aus einem Array

ist, wie ich das tun:

this.result.combos.forEach((combo) => { 
        console.log("Analyzing combo:"); 
        console.log(combo); 
      if (combo.atk < minStat || combo.atk > maxStat) 
      { 
       this.result.combos.splice(this.result.combos.indexOf(combo), 1); 
       console.log("COMBO HAS BEEN REMOVED"); 
      } 
      else 
       console.log("COMBO HAS BENE STAYED"); 
     }); 

Mein Problem ist, dass ich diese Methode mehrmals ausführen, um das Ergebnis zu erreichen. Bei jeder Ausführung dieser Methode werden meine Objekte teilweise gefiltert.

Zum Beispiel: Ich habe 200 Objekte, und ich filtere den minStat/maxStat Wert von ihnen, um mir nur die Datensätze mit minStat/maxStat Wert von 50/100 zu zeigen. Der Code wird etwa 70 Datensätze aus dem Array entfernen, aber viele Ergebnisse ohne einen minStat/maxStat von 50-100 bleiben.

Ich habe graben in diesem und ich denke, es ist auf die splice Methode related. aber ich fand keine Alternative zu diesem Problem.

Irgendwelche Hilfe?

+0

Verwenden Sie die array.filter-Methode –

Antwort

0

Es klingt wie, was Sie tun möchten, ist das Array basierend auf einem Prädikat zu filtern. Sie können die filter Funktion:

let newArray = this.result.combos.filter(combo => combo.atk < minStat || combo.atk > maxStat); 

newArray wird mit allen Elementen gefüllt werden, die combo.atk < minStat || combo.atk > maxStat und this.result noch alle ursprünglichen Elemente enthalten übereinstimmen.

Verwandte Themen