2012-05-30 14 views
13

¿Alguien tiene una guía sobre cómo consultar una matriz de hashes en coffeescript?Consultar una matriz de objetos

Por ejemplo, tengo una serie de hashes, cada uno con un "nombre" y "ajuste":

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

Quiero encontrar el elemento en esta matriz, donde el hash "nombre" es "x_axis_label "

¿Cómo puedo hacer eso fácilmente con coffeescript?

necesito algún tipo de función value_for_key_in_object(key, object) y pensé si sería parte del léxico ...

Respuesta

10

Si va a hacer esto repetidas veces, siempre buscando cosas en las que el nombre sea igual a algo, entonces es mejor que lo convierta de una matriz de mapas a simplemente un mapa donde la clave es su nombre.

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

acabo esta hackeado rápidamente:

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

Eso es increíble, y por qué realmente estoy empezando a amar Coffeescript –

8

Si por casualidad utilizar Underscore.js, puede usar find:

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

siempre prefiero una solución 'multi lenguaje' a través de una solución 'idiomática'. Por lo tanto, puede utilizar 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 
Cuestiones relacionadas