查询对象数组

Dan*_*l D 14 coffeescript

任何人都有关于如何查询coffeescript中的哈希数组的指导?

例如,我有一个哈希数组,每个哈希都有一个"名称"和"设置":

[
  {"name":"color", "setting":"red"},
  {"name":"scale_min", "setting":"15"},
  {"name":"scale_type", "setting":"linear"},
  {"name":"x_axis_label", "setting":"Weeks"}
]
Run Code Online (Sandbox Code Playgroud)

我想在这个数组中找到哈希"name"为"x_axis_label"的元素

我怎么能用coffeescript轻松做到这一点?

我需要某种value_for_key_in_object(key, object)功能,并想知道是否会成为词典的一部分......

Roc*_*mat 31

我刚刚快速攻击了这个:

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)
Run Code Online (Sandbox Code Playgroud)

演示


Lar*_*one 11

如果您要反复执行此操作,请始终查找名称等于某事物的内容,那么最好将其从一组地图转换为一个地图,其中键是名称.

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'])
Run Code Online (Sandbox Code Playgroud)

演示


AA.*_*AA. 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
Run Code Online (Sandbox Code Playgroud)


epi*_*ian 8

如果你碰巧使用的是Underscore.js,你可以使用find:

xAxisLabel = _.find data, (datum) -> datum.name is 'x_axis_label'
Run Code Online (Sandbox Code Playgroud)