2015-09-24 20 views
8

Was ist der effizienteste Weg zum Filtern oder Abbilden einer Nodelist in ES6?Filtern oder Zuordnen von Knotenlisten in ES6

Aufgrund meiner Lesungen, würde ich eine der folgenden Optionen verwenden:

[...nodelist].filter 

oder

Array.from(nodelist).filter 

Welches würden Sie empfehlen? Und gibt es bessere Möglichkeiten, zum Beispiel ohne Arrays einzubeziehen?

+2

Grundsätzlich machen beide Methoden das gleiche. Wenn Sie 'babel' verwenden, dann' '[... coll]' wird einfach 'Array.from (coll)' für alles aufrufen, was kein 'Array' ist. –

+0

FWIW, '...' Syntax kann von älteren IDEs nicht unterstützt werden, während 'Array.from()' nur eine normale Methode ist. –

Antwort

14
  • [...nodelist] wird eine Reihe von aus einem Objekt machen, wenn das Objekt iterable ist.
  • Array.from(nodelist) wird ein Array aus einem Objekt machen, wenn das Objekt iterable ist oder wenn das Objekt Array-like (hat .length und numerische Requisiten)

Ihre zwei Beispiele identisch sein wird, wenn NodeList.prototype[Symbol.iterator] vorhanden ist, weil beide Fälle Iterables abdecken. Wenn Ihre Umgebung nicht so konfiguriert wurde, dass NodeList iterierbar ist, schlägt Ihr erstes Beispiel fehl, und die zweite wird erfolgreich sein. Babel derzeit does not handle this case properly.

Wenn also Ihre NodeList iterierbar ist, liegt es wirklich an Ihnen, welche Sie verwenden. Ich würde wahrscheinlich von Fall zu Fall wählen. Ein Vorteil von Array.from ist, dass es ein zweites Argument einer Zuordnungsfunktion benötigt, während das erste [...iterable].map(item => item) ein temporäres Array erstellen müsste, würde Array.from(iterable, item => item) nicht. Wenn Sie die Liste jedoch nicht zuordnen, spielt dies keine Rolle.

+0

sehr hilfreich, danke für die detaillierten Erklärungen und die Mappingsyntax. – Christophe