javascript 如何迭代对象中的内部对象/属性
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5432967/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how to iterate over inner objects / property in an object
提问by Raymond Chenon
I have an object which has inner objects and properties defined like this:
我有一个对象,它具有如下定义的内部对象和属性:
var obj = {obj1 : { "prop1" : "nothing", "prop2" : "prop"},
obj2 : {"prop1" : "nothing", "prop2" : "prop"},
pr1 : "message",
pr2 : "mess"
};
Normally to iterate every property of an object , the for .. in
loop can do the trick
通常要迭代对象的每个属性,for .. in
循环可以做到这一点
for (property in obj){
if (obj.hasOwnProperty(property)){
console.log(property + " " + obj[property]);
}
}
the console displayed :
控制台显示:
obj1 [object Object] obj12 [object Object] pr1 message pr2 mess
obj1 [object Object] obj12 [object Object] pr1 message pr2 mess
However how to iterate the inner objects (obj1, obj2
) and their own properties (prop1,prop2
) ?
但是如何迭代内部对象 ( obj1, obj2
) 和它们自己的属性 ( prop1,prop2
) ?
回答by Marcel Korpel
Recursion is your friend:
递归是你的朋友:
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]);
}
}
}
Note: don't forget to declare property
locally using var
!
注意:不要忘记property
使用var
!
回答by domi
That's great anwsers, although the array cases is not covered, here's my contribution:
这是很好的答案,虽然没有涵盖数组案例,但这是我的贡献:
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);
回答by KooiInc
You can use recursion to achieve that:
您可以使用递归来实现:
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);
}
回答by HBP
To simply display the object structure, I often use: console.log (JSON.stringify (obj))
为了简单展示对象结构,我经常使用:console.log(JSON.stringify(obj))