获取对象属性名称作为字符串

新手上路,请多包涵

是否可以将对象属性名称作为字符串获取

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
  }
};

———————- 答案---——————-

得到它感谢伊布。他指出了正确的方法,我使用了递归函数

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'

演示:http: //jsbin.com/yabal/1/edit

原文由 CLiFoS 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 312
2 个回答

是的,你可以,稍作改变。

 function propName(prop, value){
   for(var i in prop) {
       if (prop[i] == value){
            return i;
       }
   }
   return false;
}

现在您可以像这样获得值:

  var pn = propName(person,person.first_name);
 // pn = "first_name";

注意 我不确定它可以用来做什么。

其他 Note 不能很好地处理嵌套对象。但话又说回来,请看第一个音符。

原文由 Ibu 发布,翻译遵循 CC BY-SA 3.0 许可协议

我知道使用 Object.keys(your_object) 的最佳实践。它将为您解析为数组属性名称。例子:

 var person = { firstName: 'John', lastName: 'Cena', age: '30' };
var listPropertyNames = Object.keys(person); //["firstName", "lastName", "age"]

我希望这个例子对你有用。

原文由 Triet Nguyen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题