2013-05-15 16 views
13

Sytuacjadostępu do właściwości obiektu javascript bez wiedząc, że nazwa właściwości

mam zwracane obiekt JSON. Poniżej znajduje się przykład jednego. W tym konkretnym przykładzie who można zmienić na dowolną nazwę właściwości. Tak na przykład następnym razem będzie to name zamiast who

[{"who":"Arthur"},{"who":"Craig"},{"who":"Dan"},{"who":"Daniel"},{"who":"Frank"},{"who":"Ian"},{"who":"jamie"},{"who":"Jason"},{"who":"jaz"},{"who":"Liam"},{"who":"Paul"},{"who":"Shaun"},{"who":"Wayne"}] 

Problem

W moich JS muszę być w stanie odnieść się do własności i dostępu do swoich danych bez używania jego nazwy jako nazwy zawsze będzie czymś innym.

Co Próbowałem

data.forEach(function(m){ 
    console.info(m); //Object { who="Craig"} 
    console.info(m.who); //Craig, as expected 
    console.info(m[0]); //now not sure who to get it if who changes to name 
}); 
+0

Szukasz 'm [ 'kto'] '? –

+0

istotnie, to w jaki sposób mogę zwrócić, kto. Ale muszę mieć możliwość zwrócenia ciągu znaków. Więc m ['*'] skutecznie. Nie znam nazwy nieruchomości. –

+0

Mam cię, odpowiedź została dodana. –

Odpowiedz

20

Object.keys(m)[0] powinien powrócić pierwszy enumerable nazwę właściwości w obiekcie m.

Więc jeśli m = {"who": "Arthur"}; to m[Object.keys(m)[0]] będzie "Arthur".

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys


alternatywnie: Object.values(m)[0]. Zobacz Object.values

+2

Dam koleś ... Wbijałem JS przez prawie rok i nigdy nie zawracałem sobie głowy spojrzeniem na 'Object';) dzięki za wskazanie mnie w tym kierunku. Działa doskonale! : D –

+0

Słodkie, więc mogę uzyskać widok najwyższego poziomu obiektu, odwołując się do niego za pomocą Obiekt ... niicceeee –

+0

@RickViscomi Zauważ, że 'Object.keys' nie działa w IE8. [Zobacz tutaj] (http://kangax.github.io/es5-compat-table/#Object.keys) – hitautodestruct

2

Jeśli zawsze oczekiwać obiekty te mają tylko jedną właściwość, można zrobić coś takiego:

var name, person; 
for (person in data) { 
    for (name in data[person]) { 
     console.log(data[person][name]); 
    } 
} 

Byłoby to wyliczyć poprzez każdej właściwości każdej osoby w danych. Ponieważ istnieje tylko jedna właściwość na osobę (zakładam), wylicza ona tylko tę jedną właściwość i zatrzymuje się, umożliwiając korzystanie z tej właściwości bez względu na jej nazwę.

+0

Odpowiedź Ricka jest lepsza. –

0

Można również użyć for in pętlę:

data.forEach(function (m) { 

    for (var key in m) { 

    console.log(key); // "who" 
    console.log(m[key]); // "Arthur" 

    } 

}); 

Powyższy będzie również pracować dla wielu key: value par w obiekcie IE:

[ {"who":"Arthur","who":"Fred"} ]