2011-11-26 9 views
7

pregunta bastante básica, creo, pero no pude encontrar información sobre eso.Accediendo a propiedades de una matriz de objetos

a D3 que analizar un csv y cada mirada objeto como éste

name: "whatever" 
number: "52" 

¿Cómo puedo acceder a la matriz de todas las propiedades "número" como una matriz sin necesidad de crear una nueva matriz y empujando cada elemento?

+1

¿Quiere decir que cada objeto tiene el siguiente aspecto: '{" nombre ":" lo que sea "," número ": 52}' y tiene una matriz de estos objetos? –

+0

directamente tendría acceso al campo numérico. simplemente use algo [i] ["number"] o algo [i] .number ... incluso es posible realizar bucles. ¿Hay alguna otra razón específica para que lo tenga como una matriz separada en lugar de acceder a ella directamente a través de un camino mencionado anteriormente ...? –

Respuesta

27

Uso :

var numbers = objects.map(function(o) { return o.number; }); 
+2

Muy limpio. Prefiero este sobre la respuesta aceptada. – ericmjl

+0

Increíble uso de Array.map() :) –

+0

genial. ¡Gracias! – artdias90

2

En JavaScript, no puede, porque no existe dicha matriz. Si tienes una variedad de objetos, bueno, cada objeto es su pequeño y precioso copo de nieve. Por supuesto, puede transferir los valores de "número" a una nueva matriz, pero definitivamente sería una nueva matriz.

Algunos kits de herramientas (Prototype y tal vez Functional y Underscore) tienen una función "desplume()" que está diseñada para hacer exactamente lo que usted desea, pero ellos también se ven obligados a crear nuevas matrices.

function pluck(array, property) { 
    var i, rv = []; 

    for (i = 0; i < array.length; ++i) { 
    rv[i] = array[i][property]; 
    } 

    return rv; 
} 

continuación:

var arrayOfNumbers = pluck(originalArray, "number"); 
+0

Quizás valga la pena mejorar 'pluck' para aceptar una devolución de llamada que se invoca en el ciclo y recibe el valor de la propiedad dada de cada objeto. La matriz aún se puede usar para devolver una matriz de valores devueltos por la devolución de llamada. – RightSaidFred

+0

Divertido, @RightSaidFred, estaba pensando que :-) Entonces me di cuenta de que esa función sería realmente lo que normalmente llamarías "map()", y ciertamente podrías implementar "pluck()" en términos de "mapa"() ". – Pointy

+0

Muy cierto. ¡Es solo un mapa menos flexible! Duh !! – RightSaidFred

1
for (i=0; i<myArrayOfObjects.length; i++) { 
    doWhatever(myArrayOfObjects[i].number); 
} 
0

Si está utilizando lodash, usted puede hacer esto:

var numbers = _.map(originalArray, 'number')

Cuestiones relacionadas