15

誰かがcoffeescriptでハッシュの配列をクエリする方法についてのガイダンスを持っていますか?

たとえば、ハッシュの配列があり、それぞれに「名前」と「設定」があります。

[
  {"name":"color", "setting":"red"},
  {"name":"scale_min", "setting":"15"},
  {"name":"scale_type", "setting":"linear"},
  {"name":"x_axis_label", "setting":"Weeks"}
]

この配列でハッシュ「name」が「x_axis_label」である要素を見つけたい

どうすればcoffeescriptで簡単にそれを行うことができますか?

ある種のvalue_for_key_in_object(key, object)関数が必要で、レキシコンの一部になるかどうかを考えました...

4

4 に答える 4

32

私はこれをすぐにハックしました:

data = [{"name":"color","setting":"red"},{"name":"scale_min","setting":"15"},{"name":"scale_type","setting":"linear"},{"name":"x_axis_label","setting":"Weeks"}]

find = (i for i in data when i.name is 'x_axis_label')[0]

alert(find.setting)

デモ

于 2012-05-30T16:14:20.420 に答える
12

これを繰り返し行い、名前が何かと等しいものを常に探す場合は、これをマップの配列から、キーが名前であるマップだけに変換することをお勧めします。

data = [
  {"name":"color","setting":"red"}
  {"name":"scale_min","setting":"15"}
  {"name":"scale_type","setting":"linear"}
  {"name":"x_axis_label","setting":"Weeks"}
]

myMap = {}
for row in data
  myMap[row.name] = row.setting

alert(myMap['x_axis_label'])

デモ

于 2012-05-30T18:11:20.060 に答える
10

私は常に「慣用的な」ソリューションよりも「多言語」ソリューションを好みます。したがって、あなたは使用することができますArray.filter

data = [{"name":"color","setting":"red"},{"name":"scale_min","setting":"15"},{"name":"scale_type","setting":"linear"},{"name":"x_axis_label","setting":"Weeks"}]
find = (data.filter (i) -> i.name is 'x_axis_label')[0]
alert find.setting
于 2014-06-03T09:07:52.937 に答える
8

Underscore.jsを使用している場合は、次を使用できますfind

xAxisLabel = _.find data, (datum) -> datum.name is 'x_axis_label'
于 2012-05-30T16:42:04.590 に答える