使用递归读取对象的属性和属性?

我想知道我是否可以使用递归函数来读取对象的所有属性和属性,包括嵌套属性等。 例如,如果我有一个对象:

var mObj = {}; mObj.countries = []; mObj.country = {}; mObj.country.states = []; mObj.country.state = {}; mObj.country.state = {}; 

我相信你能得到这张照片。 如果它只是一个简单的对象,那么我可以使用“for in”循环,也许嵌套“for in”循环,一个对象有许多嵌套级别,然后使用嵌套的“for in”循环变得有些混乱。 我认为使用递归会很棒。 对此有任何帮助见解将受到高度赞赏。

谢谢。

这是一个快速示例,可以帮助您最终遇到任何问题。

 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); } } 

和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);