доступ к объекту 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
});

Ответ 2

Если вы всегда ожидаете, что у этих объектов будет только одно свойство, вы можете сделать что-то вроде этого:

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

Это будет перечислять через каждое свойство каждого человека в данных. Поскольку на человека есть только одно свойство (я предполагаю), он просто перечисляет это одно свойство и останавливается, позволяя использовать это свойство независимо от его имени.

Ответ 3

Вы также можете использовать цикл for in for:

data.forEach( function ( m ) {

  for ( var key in m ) {

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

  }

});

Вышеупомянутое также будет работать для нескольких пар key: value в вашем объекте, т.е.

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