简体   繁体   中英

Accessing a JavaScript's object property without knowing that property name

Situation

I have a JSON object which is returned. And Below is an example of one. The who in this particular example can change to whatever property name is required. So for example next time this will be name rather than 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

In my JS I need to be able to refer to the property and access its data without using its name as the name will always be something different.

What I have tried

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
});

Object.keys(m)[0] should return the first enumerable property name in the object m .

So if m = {"who": "Arthur"}; then m[Object.keys(m)[0]] will be "Arthur" .

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


Alternatively: Object.values(m)[0] . See Object.values

You can also use the for in loop:

data.forEach( function ( m ) {

  for ( var key in m ) {

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

  }

});

The above would also work for multiple key: value pairs in your object ie:

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

If you always expect these objects to have only one property, you could do something like this:

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

This would enumerate through each property of each person in the data. Because there is only one property per person (I assume), it will just enumerate that one property and stop, allowing you to use that property regardless of its name.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM