2013-02-10 16 views
17

Ok, więc powiedzmy, że mam obiektGet element obiektu JS z indeksem

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

i chcę, aby uzyskać pierwszy element z niego. Tak jak chcę, to zwraca B, który ma indeks A. Jak mogę zrobić coś na wzór myobj[0] i wydostać B.

+0

Nie możesz, niezawodnie; nie ma gwarancji na kolejność właściwości przechowywanych w obiekcie. –

+1

Czy możesz skonstruować przykład, który nie jest niejednoznaczny? Które "B" jest tutaj ważne? – Eric

Odpowiedz

14

Obiekty JS nie mają zdefiniowanego porządku, są to (z definicji) niepodzielony zestawpar klucz-wartość.

Jeśli przez "pierwszy" znaczy "pierwszy w porządku leksykograficznym", można jednak użyć:

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

a następnie użyć:

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

Umm ... co oznacza leksykalny haha? – ChapmIndustries

+1

@ChapmIndustries leksykalna jest jak alfabetyczna, chociaż domyślnie przyjmuje duże litery przed małymi literami, ponieważ analizuje tylko wartości ASCII każdego znaku. – Alnitak

+0

"leksykalny" powinien być "leksykograficzny" – Barmar

-2
myobj.A 

------ - lub ----------

myobj['A'] 

dostaniesz "B"

+4

Ale punktem PO jest to, że nazwa właściwości "A" nie jest znana. –

-2

Jeśli chcesz określonej kolejności, musisz użyć tablicy, a nie obiektu. Obiekty nie mają zdefiniowanego porządku.

Na przykład, za pomocą tablicy, można to zrobić:

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

Następnie można użyć myObj [0], aby zdobyć pierwszy obiekt w tablicy.

Albo, w zależności od tego, co starasz się zrobić:

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

wiem, że to późna odpowiedź, ale myślę, że to, co PO poprosił.

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

"Kolejność właściwości jest taka sama, jak w przypadku ręcznego zapętlenia właściwości obiektu." jak pokazano w tym [link] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) –

+1

Dla każdego, kto ma zamiar tego użyć, należy pamiętać, że nie wszystkie przeglądarki obsługują Object.keys. Zobacz tutaj - http://kangax.github.io/compat-table/es5/#test-Object.keys. MDN zapewnia również ployfill - 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

Mam nadzieję, że pomoże

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

    console.log(myobj[index]); 

    )}; 
+0

Zmieniłeś nawias zamykający i nawias klamrowy! – Syraxis