我想知道我是否可以使用递归函数来读取对象的所有属性和属性,包括嵌套属性等。例如, 如果我有一个对象:
var mObj = {};
mObj.countries = [];
mObj.country = {};
mObj.country.states = [];
mObj.country.state = {};
mObj.country.state = {};
我相信你能得到这张照片。如果它只是一个简单的对象,那么我可以使用“for in”循环,也许嵌套“for in”循环,一个对象有许多嵌套级别,然后使用嵌套的“for in”循环变得有些混乱。我认为使用递归会很棒。对此的任何帮助见解都将受到高度赞赏。
谢谢。
答案 0 :(得分:3)
这是一个快速示例,可以帮助您解决任何问题。
var level = '';
var readProperties = function(val) {
if (Object.prototype.toString.call(val) === '[object Object]') {
for (var propertyName in val) {
if (val.hasOwnProperty(propertyName)) {
console.log(level + propertyName + ':');
level += ' ';
readProperties(val[propertyName]);
}
}
}
else {
console.log(level + val);
level = level.substring(0, level.length - 2);
}
}
答案 1 :(得分:0)
与OP有同样的问题,但无法使已接受的解决方案正常工作。这就是我最终做的事情:
function foreachAttribute(object, handleAttributeName, handleAttributeValue) {
var attributeNames = [];
function recursion(object) {
for ( var attribute in object) {
if (typeof object[attribute] == 'object') {
attributeNames.push(attribute);
recursion(object[attribute]);
attributeNames = attributeNames.slice(0,
attributeNames.length - 1);
} else {
handleAttributeName(attributeNames.join(".") + "."
+ attribute);
handleAttributeValue(object[attribute]);
}
}
}
recursion(object);
}
var attributeName = "";
var handleAttributeName = function(name) {
attributeName = name;
};
var handleAttributeValue = function(value) {
console.log(attributeName + "=" + value);
};
var data = {
var1 : {
asdf : 123
},
var2 : 321
};
foreachAttribute(data, handleAttributeName, handleAttributeValue);