web-dev-qa-db-ja.com

そのプロパティ名を知らずにJavaScriptのオブジェクトプロパティにアクセスする

状況

返されるJSONオブジェクトがあります。そして、以下はその一例です。この特定の例のwhoは、必要なプロパティ名に変更できます。したがって、たとえば次回は、これはnameではなく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"}]

問題

私のJSでは、名前が常に異なるため、名前を使用せずにプロパティを参照してデータにアクセスできる必要があります。

私が試したこと

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
});
18
Jamie Hutber

Object.keys(m)[0]は、オブジェクトmの最初の列挙可能なプロパティ名を返す必要があります。

したがって、_m = {"who": "Arthur"};_の場合、m[Object.keys(m)[0]]は_"Arthur"_になります。

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


または、Object.values(m)[0]Object.values を参照してください

30
Rick Viscomi

for inループを使用することもできます。

data.forEach( function ( m ) {

  for ( var key in m ) {

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

  }

});

上記は、オブジェクト内の複数のkey: valueペアに対しても機能します。

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

これらのオブジェクトにプロパティが1つしかないことが常に予想される場合は、次のようにすることができます。

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

これは、データ内の各人の各プロパティを介して列挙されます。 1人あたりのプロパティは1つしかないため(私は推測します)、その1つのプロパティを列挙して停止するだけで、名前に関係なくそのプロパティを使用できます。

2
Alec Henninger