与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);
我会说是的,你必须使用递归。绝对正确的观察。所以请注意,发布你的代码并告诉我们你有什么问题 – ControlAltDel
我今天很慢,我不明白。你可以用模拟输入对象详细说明,并描述你想要的输出类型吗?就像,给了mObj你想要那些mObj.countries,状态,填入? –
在Chrome的开发者工具(或者Firebug,我相信)中,如果你使用'console.log()'对象,它将递归地打印它的所有属性。我建议你使用其中的一种进行开发,除非你想将这些信息用于调试以外的其他功能。 –