2015-09-24 14 views
8

Cách hiệu quả nhất để lọc hoặc ánh xạ một nốt trong ES6 là gì?Bộ lọc hoặc bản đồ nodelists trong ES6

Dựa trên các bài đọc của tôi, tôi sẽ sử dụng một trong các tùy chọn sau:

[...nodelist].filter 

hoặc

Array.from(nodelist).filter 

Mà một trong những bạn muốn giới thiệu? Và có cách nào tốt hơn, ví dụ mà không liên quan đến mảng?

+2

Về cơ bản, cả hai phương pháp đều thực hiện tương tự. Bạn đang sử dụng 'babel', sau đó' [... coll] 'sẽ gọi đơn giản là 'Array.from (coll)' cho bất cứ thứ gì không phải là một 'mảng'. Cú pháp –

+0

FWIW, '...' có thể không được hỗ trợ bởi các IDE cũ hơn trong khi 'Array.from()' chỉ là một phương thức thông thường. –

Trả lời

14
  • [...nodelist] sẽ tạo một mảng ngoài đối tượng nếu đối tượng có thể lặp lại được.
  • Array.from(nodelist) sẽ làm cho một mảng ra của một đối tượng nếu đối tượng là iterable hoặc nếu đối tượng là mảng tương tự (có .length và đạo cụ số)

hai ví dụ của bạn sẽ giống hệt nhau nếu NodeList.prototype[Symbol.iterator] tồn tại, vì cả hai trường hợp đều có thể lặp lại. Nếu môi trường của bạn chưa được định cấu hình sao cho NodeList có thể lặp lại, ví dụ đầu tiên của bạn sẽ thất bại và ví dụ thứ hai sẽ thành công. Babel hiện tại does not handle this case properly.

Vì vậy, nếu NodeList của bạn có thể lặp lại, điều đó thực sự tùy thuộc vào bạn mà bạn sử dụng. Tôi có khả năng sẽ chọn trên cơ sở từng trường hợp cụ thể. Một lợi ích của Array.from là phải mất một đối số thứ hai của một hàm ánh xạ, trong khi [...iterable].map(item => item) đầu tiên sẽ phải tạo một mảng tạm thời, Array.from(iterable, item => item) thì không. Tuy nhiên, nếu bạn không lập bản đồ danh sách, nó không quan trọng.

+0

rất hữu ích, cảm ơn các giải thích chi tiết và cú pháp ánh xạ. – Christophe

Các vấn đề liên quan