Coffeescript'te array.any()
ve array.all()
yöntemleri nasıl uygulanır?Coffeescript'te array.any() ve array.all() yöntemleri nasıl uygulanır?
cevap
Bunlar aslında Javascript 1.6'un bir parçasıdır ve aynı şekilde CoffeeScript'te çalışacaktır. some ve every'u istiyorsunuz.
Hangi ortamda olduğunuzu bilmiyorum, ancak IE < 9 bu yöntemleri desteklemiyor gibi görünüyor. Eklemek oldukça kolay. Uyumluluk kodunu gösteren bu sayfalarda bir kod snippet'i var ve isterseniz bunları don't have to numaralı telefondan çevirerek CoffeeScript'e çevirebilirsiniz.
bir katı bir anlayışa, daha basit bir yolu (denenmemiş) olacaktır:
if not Array.prototype.some
Array.prototype.some = (f) -> (x for x in @ when f(x)).length > 0
if not Array.prototype.every
Array.prototype.every = (f) -> (x for x in @ when f(x)).length == @length
Fakat bunlardan hiçbiri kısa devre mantığı var. Düzenle: Ama Ricardo'nun daha iyi bir sürümü için cevabını görün. herhangi bir büyük JS ortamında çalışır _.any
ve _.all
yöntemlerle (nam-ı diğer _.some
ve _.every
) sağlar dışarı underscore.js
kontrol. İşte underscore.coffee yılında CoffeeScript uygulanan konum edebilirsiniz:
(-Kısa devre optimize
_.some = (obj, iterator, context) ->
iterator ||= _.identity
return obj.some iterator, context if nativeSome and obj.some is nativeSome
result = false
_.each obj, (value, index, list) ->
_.breakLoop() if (result = iterator.call(context, value, index, list))
result
_.every = (obj, iterator, context) ->
iterator ||= _.identity
return obj.every iterator, context if nativeEvery and obj.every is nativeEvery
result = true
_.each obj, (value, index, list) ->
_.breakLoop() unless (result = result and iterator.call(context, value, index, list))
result
(Bunlar sadece bir istisna atar basit iterasyon yöntemi ve _.breakLoop
, hangi _.each
bağlıdır.)) sürümleri: bu özellik null
/undefined
olduğunda
Array.prototype.some ?= (f) ->
(return true if f x) for x in @
return false
Array.prototype.every ?= (f) ->
(return false if not f x) for x in @
return true
?=
Bugün buna bakarak ve bir kat olarak all
uygulamaya karar ve senin de any
için aynı yapabilirdi (ama ya kısa devre yapar değil) varsayalım:
all = (someArray, predicate) ->
reduceAll = (left, right) ->
return left and right
return [predicate(elem) for elem in someArray].reduce(reduceAll, true)
olmayan kısa devre any
çoğunlukla benzer olacaktır:
reduceAny = (left, right) ->
return left or right
[p(elem) for elem in someArray].reduce(reduceAny, false)
Ben bu şekilde all
yaptım okunabilir olduğu tespit çünkü. Ayrıca, bunu bir dizi yöntemi yerine serbest kayan bir işlev olarak yaptım.
- 1. Python'da "classmethod" ve "staticmethod" yöntemleri nasıl uygulanır?
- 2. Xcode'ta protokol yöntemleri nasıl otomatik olarak uygulanır?
- 3. Şablon uzmanlık yöntemleri * .cpp dosyalarında nasıl uygulanır?
- 4. Sınıflar içinde geri arama yöntemleri nasıl uygulanır (PHP)
- 5. AfterXXX ve BeforeXXX kullanarak @ClassRule kullanarak testng civataları nasıl uygulanır
- 6. HtmlHelper yöntemleri ve RouteValueDictionary
- 7. Compose ve and Yöntemleri
- 8. PHP'de arayüzler ve sihir yöntemleri nasıl kullanılır?
- 9. Bir sınıfı parametre olarak geçirme ve yöntemleri devralma yöntemleri
- 10. Muteks ve kilit yapıları nasıl uygulanır?
- 11. RDB'lerde düzenli ve bileşik dizinler nasıl uygulanır?
- 12. Protokolde özellikler nasıl tanımlanır ve uygulanır
- 13. clojure'da, 've' bir listeye nasıl uygulanır?
- 14. Ön Kontrol Nedir ve PHP'de nasıl uygulanır?
- 15. UIImageView'da bir dokunma ve bekletme nasıl uygulanır?
- 16. Bir karşılaştırıcı akışı nasıl oluşturulur ve uygulanır?
- 17. __LINE__ ve __FILE__ sabitleri Ruby'de nasıl uygulanır?
- 18. ngram sayılar ve nltk kullanarak nasıl uygulanır?
- 19. Kalıcı Python `listesi` nasıl uygulanır?
- 20. JQuery ve Kontrol Wrap ve Unwrap yöntemleri
- 21. Özet yöntemleri ve varargs açıklama
- 22. Uzantı yöntemleri nasıl derlenir?
- 23. Java yöntemleri nasıl oluşturulur?
- 24. Bir MPVolumeView nasıl uygulanır?
- 25. operatörü sil - nasıl uygulanır?
- 26. Doğrulama nasıl uygulanır?
- 27. teradata sıralaması nasıl uygulanır
- 28. OpenID nasıl uygulanır?
- 29. Django otp nasıl uygulanır?
- 30. 'Beğen' sistemi nasıl uygulanır
Mükemmel cevap. Aşağıdaki yanıtın dediği gibi, eski tarayıcılarla uyumluluk için underscore.js'yi kullanabileceğini eklemeliyim. – brandizzi
Kısa devre eklemek kolaydır ve 'unuttum' = ', cevabımı görün :) –
@Ricardo - Evet, bu daha iyi. Ayrıca, ben bilmiyordum? = Hile, bu yüzden oldukça temiz. –