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