2015-09-24 10 views
8

Jaki jest najskuteczniejszy sposób filtrowania lub mapowania węzłów w ES6?Filtrowanie lub mapowanie węzłów w ES6

podstawie moich odczytów, chciałbym skorzystać z jednej z następujących opcji:

[...nodelist].filter 

lub

Array.from(nodelist).filter 

który z nich polecacie? A czy istnieją lepsze sposoby, na przykład bez angażowania tablic?

+2

Zasadniczo, obie metody robią to samo. Używasz 'babel', a następnie' [... coll] 'po prostu wywoła' Array.from (coll) 'dla wszystkiego, co nie jest' Array'. –

+0

FWIW, składnia '...' może nie być obsługiwana przez starsze IDE, podczas gdy 'Array.from()' jest zwykłą metodą. –

Odpowiedz

14
  • [...nodelist] stworzy tablicę z obiektu, jeśli obiekt jest iterowalny.
  • Array.from(nodelist) będzie tablicę z obiektem, jeżeli obiekt jest iterowalny lub jeśli obiekt jest tablica-podobne (nie .length i podpory numerycznych)

Dwustopniowa przykłady będą identyczne, jeśli NodeList.prototype[Symbol.iterator] istnieje ponieważ oba przypadki obejmują iterables. Jeśli twoje środowisko nie zostało skonfigurowane tak, że NodeList jest iterowalne, Twój pierwszy przykład się nie powiedzie, a drugi się powiedzie. Babel obecnie does not handle this case properly.

Jeśli więc Twój NodeList jest iterowalny, to naprawdę zależy od Ciebie. Najprawdopodobniej wybrałbym dla każdego przypadku z osobna. Jedną z korzyści z Array.from jest to, że zajmuje on drugi argument funkcji odwzorowania, podczas gdy pierwszy [...iterable].map(item => item) musiałby utworzyć tymczasową tablicę, której nie zrobiłby Array.from(iterable, item => item). Jeśli jednak nie mapujesz listy, nie ma to znaczenia.

+0

Bardzo pomocne, dzięki za szczegółowe wyjaśnienia i składnię mapowania. – Christophe