0

これは、配列内の値の存在を検索する方法です。

words = ["rattled", "roudy", "rebbles", "ranks"]
alert "Stop wagging me" if "ranks" in words

指定されたプロパティ値を持つオブジェクトの存在を検索する際に、同様の優雅さを探しています:

words = [
  { id: 1, value: "rattled" },
  { id: 2, value: "roudy" },
  { id: 3, value: "rebbles" },
  { id: 4, value: "ranks" }
]
alert "Stop wagging me" if "ranks" in words.value

しかし、一番下の行は機能しません。

4

2 に答える 2

1

1ライナーが必要な場合は、次のように実行できます。

alert "Stop wagging me" if do -> return yes for w in words when w.value is 'ranks'

利点は、新しい配列を導出する代わりに配列内で反復し(メモリ効率が良い)、一致するものが見つかるとすぐに反復を停止する(CPU効率が良い)ことです。支払う代償は、おそらく少し読みにくいということです。これに対処するための最良の方法は、独自のユーティリティ関数を作成することです。

inObjectMember = (obj, key, value) ->
  for o in obj when o[key] is value
    return yes

alert "Stop wagging me" if inObjectMember words, 'value', 'ranks'
于 2013-03-12T15:56:21.770 に答える
1

私はちょうど次のことを試してみましたが、うまくいきました:

alert "Stop wagging me" if "ranks" in (word.value for word in words)
于 2013-03-12T13:51:12.363 に答える