2013-02-10 18 views
17

Ok quindi cerchiamo di dire che ho il mio oggettoOttenere elemento dell'oggetto JS con un indice

myobj = {"A":["B"], "B":["C"]} 

e voglio ottenere il primo elemento fuori di esso. Come in Voglio che restituisca B che ha un indice di A. Come posso fare qualcosa sulla falsariga di myobj[0] e uscire B.

+0

Non è possibile, in modo affidabile; non c'è garanzia dell'ordine delle proprietà memorizzate in un oggetto. –

+1

Puoi costruire un esempio non ambiguo? Quale 'B' è importante qui? – Eric

risposta

14

Gli oggetti JS non hanno un ordine definito, sono (per definizione) un insieme di coppie chiave-valore non ordinate .

Se per "prima" intendi "prima in ordine lessicografico", è possibile comunque utilizzare:

var sortedKeys = Object.keys(myobj).sort(); 

e quindi utilizzare:

var first = myobj[sortedKeys[0]]; 
+1

Umm ... cosa significa lessico haha? – ChapmIndustries

+1

@ChapmIndustries lessicale è come in ordine alfabetico, anche se di default assume caratteri maiuscoli prima di lettere minuscole, poiché guarda solo i valori ASCII di ciascun carattere. – Alnitak

+0

"lessicale" dovrebbe essere "lessicografico" – Barmar

-2
myobj.A 

------ - oppure ----------

myobj['A'] 

ti porterà a "B"

+4

Ma il punto dell'OP è che il nome della proprietà 'A' non è noto. –

-2

Se si desidera un ordine specifico, è necessario utilizzare un array, non un oggetto. Gli oggetti non hanno un ordine definito.

Ad esempio, utilizzando un array, si potrebbe fare questo:

var myobj = [{"A":["B"]}, {"B": ["C"]}]; 
var firstItem = myobj[0]; 

Quindi, è possibile utilizzare myobj [0] per ottenere il primo oggetto nella matrice.

Oppure, a seconda di ciò che si sta cercando di fare:

var myobj = [{key: "A", val:["B"]}, {key: "B", val:["C"]}]; 
var firstKey = myobj[0].key; // "A" 
var firstValue = myobj[0].val; // "["B"] 
34

Lo so che è una risposta in ritardo, ma penso che questo è ciò che ha chiesto OP per.

myobj[Object.keys(myobj)[0]]; 
+0

"L'ordinamento delle proprietà è uguale a quello dato dal looping delle proprietà dell'oggetto manualmente." come mostrato in questo [collegamento] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) –

+1

Per tutti coloro che lo utilizzeranno, tieni presente che non tutti i browser supportano Object.keys. Vedi qui - http://kangax.github.io/compat-table/es5/#test-Object.keys. MDN fornisce anche un ployfill per questo: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys. – jeanfrg

0
var myobj = {"A":["B"], "B":["C"]}; 

var keysArray = Object.keys(myobj); 

var valuesArray = Object.keys(myobj).map(function(k) { 

    return String(myobj[k]); 

}); 

var mydata = valuesArray[keysArray.indexOf("A")]; // B 
-1

Spero che aiuterà

$.each(myobj, function(index, value) { 

    console.log(myobj[index]); 

    )}; 
+0

Hai cambiato la parentesi di chiusura e la parentesi graffa! – Syraxis

Problemi correlati