array.any()
とarray.all()
メソッドをCoffeescriptで実装するには?Coffeescriptでarray.any()とarray.all()メソッドを実装する方法は?
答えて
これらは実際にJavascript 1.6の一部であり、CoffeeScriptではまったく同じように動作します。 someとeveryが必要です。
私はどのような環境にいるのかわかりませんが、IE < 9はこれらの方法をサポートしていないようです。彼らはかなり簡単に追加することができます。これらのページには、互換コードを示すコードスニペットがあります。必要ならば、don't have toでも、それらをCoffeeScriptに翻訳できます。
cruder、簡単な方法は、(未テスト)のようになります。
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
しかし、それらのいずれも短絡ロジックを持っています。 を編集してください。しかし、より良いバージョンのリカルドの答えを見てください。
すべての主要なJS環境で実行されます_.any
と_.all
方法(別称、_.some
と_.every
)をご提供する、underscore.jsをチェックしてください。ここではそれらがunderscore.coffeeでのCoffeeScriptで実装している方法は次のとおりです。
_.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
(これらは単に例外をスロー単純な反復法、および_.breakLoop
、である、_.each
によって異なります。)
で短絡(最適化)のバージョン:そのプロパティがnull
/undefined
とき
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
?=
は "実存の割り当て" のために、のみ実行されます。
私はこの今日を見て、折り目としてall
を実施することを決定した、と私はあなたにもany
のために同じことを行うことができます(しかし、それはどちらか、短絡をしない)とした。
all = (someArray, predicate) ->
reduceAll = (left, right) ->
return left and right
return [predicate(elem) for elem in someArray].reduce(reduceAll, true)
非短絡any
はほとんど同様であろう:
reduceAny = (left, right) ->
return left or right
[p(elem) for elem in someArray].reduce(reduceAny, false)
私はこの方法all
をした私はそれが読めることが判明しているため。また、私はちょうど配列メソッドの代わりにフリーフローティング関数としてそれをやった。
- 1. Javaメソッドを実装する方法は?
- 2. GestureListener.onFling()メソッドの実装方法
- 3. 'NSTableview Delegate'メソッドの実装方法は?
- 4. 更新パネルでGetEnumeratorメソッドを実装する方法は?
- 5. 静的クラスで非静的メソッドを実装する方法は?
- 6. Authorize.net PHPでAIMメソッドを実装する正しい方法は?
- 7. 'implements'を実装しているCoffeeScript
- 8. Objective-Cシングルトンがinitメソッドを実装する方法は?
- 9. 控えめなメソッド転送を実装する方法は?
- 10. メソッドの+実装とは何ですか?
- 11. 内部で拡張メソッドを実装する方法
- 12. C++でスレッドセーフなメソッドを実装する適切な方法11
- 13. hashCodeメソッドの実装でオーバーフローを処理する方法
- 14. ContentProviderのgetParentメソッドの実装方法
- 15. VSCodeでcoffeescriptをデバッグする方法は?
- 16. 実装GetEnumeratorメソッドは、C#で
- 17. EntityManager(JPA)を使用してDAOでupdate()メソッドを実装する方法は?
- 18. サブクラスにメソッドの実装を強制する方法
- 19. httpclientのHEADメソッドを実装する方法
- 20. Stripes、GAE:他のメソッド処理(POST)を実装する方法
- 21. Javaでコンパレータの比較メソッドを実装する最良の方法は?
- 22. Javaで非同期メソッド呼び出しを実装する方法は?
- 23. 特定の方法で動作するように抽象メソッドの実装を実施する方法
- 24. QWidgetでmouseEnterイベントとmouseLeaveイベントを実装する方法は?
- 25. OData Javaでページングとキャッシングを実装する方法は?
- 26. Squeeze BoxのサンプルコードをJavaScriptとHTMLで実装する方法は?
- 27. Javaでスタックとキューを実装する方法は?
- 28. javascriptとphpでヘルプ機能を実装する方法は?
- 29. MongoDBでキーワードと位置検索を実装する方法は?
- 30. iPhoneでスライドインとスライドアウトを実装する方法は?
完璧な答え。私はちょうど古いブラウザとの互換性のためにunderscore.jsを使うことができると付け加えます。 – brandizzi
短絡を追加するのは簡単ですし、 '?='を忘れた場合は、私の答えを見てください:) –
@Ricardo - そうですね。また、私は知りませんでしたか?=トリックなので、きれいです。 –