與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()'對象,它將遞歸地打印它的所有屬性。我建議你使用其中的一種進行開發,除非你想將這些信息用於調試以外的其他功能。 –