Подтвердить что ты не робот

Запрос массива объектов

У кого-нибудь есть рекомендации о том, как запрашивать массив хэшей в 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) и фигурирует, если бы была частью лексики...

4b9b3361

Ответ 1

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

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

Демо

Ответ 2

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

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)

Демо

Ответ 3

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

Ответ 4

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

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