【发布时间】:2012-11-16 17:07:18
【问题描述】:
是否可以将对象属性名作为字符串获取
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
}
};
----------回答------ ------
感谢 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'
【问题讨论】:
-
我很困惑...为什么您希望属性名称返回您输入的相同内容?那么您已经知道属性名称...如果您正在寻找一种遍历属性的方法,您可以使用括号表示法并遍历键,因为属性也是哈希索引
-
您还需要将对象的引用传递给函数。
-
不是自动的。
country属性引用的字符串对address对象一无所知,address属性引用的对象对person对象一无所知。 -
我知道这可能会造成混淆,但这正是我所需要的。我需要将属性名称作为字符串坚韧
-
-1 抱歉,您的代码确实是一个不好的做法。请参阅此示例:jsbin.com/iyabal/4/edit ... 和 en.wikipedia.org/wiki/Nestor_Burma 作为参考 ;-)
标签: javascript string object properties