2011-11-26 14 views
7

domanda piuttosto semplice, ma non ho trovato informazioni su questo.Accesso alle proprietà di una matrice di oggetti

Attraverso d3 ho analizzare una csv e ogni aspetto oggetto come questo

name: "whatever" 
number: "52" 

Come posso accedere alla matrice di tutte le proprietà "numero" come un array senza creare un nuovo array e spingendo ogni elemento?

+1

Intendi dire che ogni oggetto assomiglia a: '{" nome ":" qualunque "," numero ": 52}' e hai una matrice di questi oggetti? –

+0

avresti direttamente accesso al campo numerico. basta usare qualcosa [i] ["numero"] o qualcosa [i] .number ... anche il looping è possibile. C'è qualche altra ragione specifica per averlo come array separato piuttosto che accedervi direttamente attraverso un modo menzionato prima ... ?? –

risposta

27

Uso :

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

Molto pulito. Preferisco questa sopra la risposta accettata. – ericmjl

+0

Uso fantastico di Array.map() :) –

+0

genial. Grazie! – artdias90

2

In JavaScript, non è possibile, perché non esiste tale array. Se hai una serie di oggetti, beh, ogni oggetto è il suo prezioso piccolo fiocco di neve. Ovviamente puoi trasferire i valori "numero" in un nuovo array, ma sarebbe sicuramente un nuovo array.

Alcuni toolkit (Prototype e forse Functional e Underscore) hanno una funzione "pluck()" progettata per fare esattamente ciò che si desidera, ma anche loro sono costretti a creare nuovi array.

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

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

    return rv; 
} 

Poi:

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

Forse vale la pena di migliorare il "pluck" per accettare un callback che viene invocato nel loop e riceve il valore della proprietà data di ciascun oggetto. La matrice può ancora essere utilizzata per restituire una matrice di valori restituiti dal callback. – RightSaidFred

+0

Divertente, @RightSaidFred, stavo solo pensando che :-) Poi ho capito che quella funzione sarebbe davvero quella che normalmente chiameresti "map()", e potresti certamente implementare "pluck()" in termini di "mappa()". – Pointy

+0

Molto vero. È solo una mappa meno flessibile! Duh !! – RightSaidFred

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

Se si utilizza lodash, si può fare questo:

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

Problemi correlati