2015-11-17 11 views
14

Kısa bir süre önce projelerimde altçizgi/lodash aşırı kullanımı azaltmaya başlıyorum ve tarayıcılarda find yönteminin tam desteğinin olmadığını farkettim. filter sonuçlarıfind() ve filter() arasındaki fark shift() on javascript

var user = users.find(function() { ... }); 

yoksa yöntemi (yumruk maç yineleme durdurma) "Bul" üzerinde bariz optimizasyon olmadığını hayal

var user = users.filter(function() { ... }).shift(); 

ancak üzerinde ES6 yöntemi find ve kullanma .shift() arasındaki fark nedir ikinci yaklaşımı kullanarak beklenmedik sonuçlar alabilir miyim? Bunun yerine polyfill kullanmalı mıyım? Niye ya?

+0

ne beklenmedik sonuçlar? –

+2

Vardiya işlevi, dizinin ilk öğesini kaldırır ve döndürür. Filtre işlevi yeni bir dizi oluşturur. Bunun neden sorun olabileceğini anlamıyorum. Kimse? –

cevap

30

Açık (ve fark edilir) ek yükün yanı sıra, evet, sonuçlar değişebilir. filter dizinin sonuna kadar çalışır ve her öğede geri çağrısını çağırır; Biri bulduktan sonra duran find'un aksine. Geri arama, bu ek olarak yinelenen öğelerin birinde bir istisna atarsa, sonuç farklıdır.
find'u kullanmamak için iyi bir neden göremiyorum.

+3

IE, 'bul' özelliğini desteklemiyor. – hanesjw

+5

@hanesjw 'find' kullanmak için hiçbir sebep yok, sadece [polyfill] 'i yüklemek için bir sebep (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find #Polyfill) – Bergi

+0

IE kullanmamanın nedeni budur. –

8

polyfill; users.filter(function() { ... }).shift();, gereksiz çöp toplama işlemini tetiklerken döngüleri atıyor.

  • filter

    biraz daha az israfa neden model kullanmak olacaktır tüm dizi tarar ve bir dizi
  • shift oluşturur hemen geçici dizisi

bir tüm dizinler değiştirmek zorunda users.filter(function() { ... })[0]

İlgili konular