是否有可能得到的對象屬性的字符串名字獲取對象屬性的字符串名字
person = {};
person.first_name = 'Jack';
person.last_name = 'Trades';
person.address = {};
person.address.street = 'Factory 1';
person.address.country = 'USA';
我想用這樣的:
var pn = propName(person.address.country); // should return 'country' or 'person.address.country'
var pn = propName(person.first_name); // should return 'first_name' or 'person.first_name'
謝謝你在先進
注意:這段代碼正是我要找的。我明白這聽起來很愚蠢,但事實並非如此。
這就是我想要做的。
HTML
person = {};
person.id_first_name = 'Jack';
person.id_last_name = 'Trades';
person.address = {};
person.address.id_address = 'Factory 1';
person.address.id_country = 'USA';
extPort.postMessage
(
{
message : MSG_ACTION,
propName(person.first_name): person.first_name
}
};
---------------------- ANSWER ------------ -----------
感謝ibu。他指出正確的方法,我用遞歸函數
var res = '';
function propName(prop, value) {
for (var i in prop) {
if (typeof prop[i] == 'object') {
if (propName(prop[i], value)) {
return res;
}
} else {
if (prop[i] == value) {
res = i;
return res;
}
}
}
return undefined;
}
var pn = propName(person, person.first_name); // returns 'first_name'
var pn = propName(person, person.address.country); // returns 'country'
DEMO:http://jsbin.com/iyabal/1/edit
我很困惑......爲什麼要讓屬性名稱返回與您餵食的食物相同的東西?您已經知道屬性名稱,然後...如果您正在尋找通過屬性進行迭代的方式,則可以使用括號表示法並循環通過鍵,因爲屬性也是散列索引 – RonaldBarzell
您還需要將引用傳遞給將對象放入函數中。 –
不自動。由'country'屬性引用的字符串不知道任何有關'address'對象的信息,而'address'屬性引用的對象不知道有關'person'對象的任何信息。 –