доступ к объекту 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
});
Ответы
Ответ 1
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
Ответ 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"} ]