2012-05-30 2 views
13

У кого-нибудь есть рекомендации о том, как запросить массив хэшей в coffeescript?Запрос массива объектов

Например, у меня есть массив хэшей, каждый с «именем» и «настройки»:

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

Я хочу, чтобы найти элемент в этом массиве, где «имя» хэш «x_axis_label "

Как я могу легко сделать это с помощью coffeescript?

мне нужна какая-то value_for_key_in_object(key, object) функции и подумал, что если бы часть лексикона ...

ответ

10

Если вы собираетесь делать это повторно, всегда ищите вещи, где имя равно чему-то, тогда вам лучше преобразовать это из массива карт только в карту, где ключ - это имя.

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']) 

Demo

27

я просто взломал это быстро:

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) 

Demo

+0

Это потрясающе, и почему я действительно начинаю любить Coffeescript –

8

Если вам случится используйте Underscore.js, вы можете использовать find:

xAxisLabel = _.find data, (datum) -> datum.name is 'x_axis_label' 
9

Я всегда предпочитаю решение 'Многоязычного' над 'идиоматическим' решением. Таким образом, вы можете использовать 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 
Смежные вопросы