Как перебирать внутренние объекты/свойство в объекте
У меня есть объект, который имеет внутренние объекты и свойства, определенные следующим образом:
var obj = {obj1 : { "prop1" : "nothing", "prop2" : "prop"},
obj2 : {"prop1" : "nothing", "prop2" : "prop"},
pr1 : "message",
pr2 : "mess"
};
Обычно для итерации каждого свойства объекта цикл for .. in
может выполнять трюк
for (property in obj){
if (obj.hasOwnProperty(property)){
console.log(property + " " + obj[property]);
}
}
отображается консоль:
obj1 [object Object]
obj12 [object Object]
pr1 message
pr2 mess
Однако как итерировать внутренние объекты (obj1, obj2
) и их собственные свойства (prop1,prop2
)?
Ответы
Ответ 1
Рекурсия - ваш друг:
function iterate(obj) {
for (var property in obj) {
if (obj.hasOwnProperty(property)) {
if (typeof obj[property] == "object")
iterate(obj[property]);
else
console.log(property + " " + obj[property]);
}
}
}
Примечание: не забудьте объявить property
локально с помощью var
!
Ответ 2
Для достижения этой цели вы можете использовать рекурсию:
function Props(obj) {
function getProps(obj){
for (var property in obj) {
if (obj.hasOwnProperty(property)){
if (obj[property].constructor == Object) {
console.log('**Object -> '+property+': ');
getProps(obj[property]);
} else {
console.log(property + " " + obj[property]);
}
}
}
}
getProps(obj);
}
см. http://jsfiddle.net/KooiInc/hg6dU/
Ответ 3
Это замечательные люди, хотя случаи массивов не покрываются, вот мой вклад:
var getProps = function (obj) {
for (var property in obj) {
if (obj.hasOwnProperty(property) && obj[property] != null) {
if (obj[property].constructor == Object) {
getProps(obj[property]);
} else if (obj[property].constructor == Array) {
for (var i = 0; i < obj[property].length; i++) {
getProps(obj[property][i]);
}
} else {
console.log(obj[property]);
}
}
}
}
getProps(myObject);
Ответ 4
Чтобы просто отобразить структуру объекта, я часто использую: console.log(JSON.stringify(obj))