使用JavaScript中对象的值获取密钥?

时间:2012-11-07 16:34:02

标签: javascript object hashmap

c =      {
            "UNKNOWN_ERR" : 0,
            "INDEX_SIZE_ERR" : 1,
            "DOMSTRING_SIZE_ERR" : 2,
            "HIERARCHY_REQUEST_ERR" : 3,
            "WRONG_DOCUMENT_ERR" : 4,
            "INVALID_CHARACTER_ERR" : 5,
            "NO_DATA_ALLOWED_ERR" : 6,
            "NO_MODIFICATION_ALLOWED_ERR" : 7,
            "NOT_FOUND_ERR" : 8,
            "NOT_SUPPORTED_ERR" : 9}

要使用密钥获取值很简单,我只需使用c["UNKNOWN_ERR"]中的密钥获取0,因为所有值都是唯一的,可以安全地获取密钥(消息)值(错误代码)。

是否有标准方法可以做到这一点,还是我需要编写一个查看所有键并搜索该特定值的函数?

4 个答案:

答案 0 :(得分:17)

正如您已经假设的那样,您需要迭代对象的属性并检查值。

for(var key in c) {
    if(c[key] === whatever) {
        // do stuff with key
    }
}

答案 1 :(得分:9)

es6 find方法:

const getKey = (obj,val) => Object.keys(obj).find(key => obj[key] === val);

在你的情况下

console.log(getKey(c,1)); // INDEX_SIZE_ERR

答案 2 :(得分:6)

Underscore为此

提供了更简单的解决方案

您也可以使用此代码获取密钥

var errKey = _.invert(c)[errCode];

表示e.x.如果您使用errCode = 3,如下所示

var errKey = _.invert(c)[3];

然后

errKey将为HIERARCHY_REQUEST_ERR

答案 3 :(得分:1)

尝试findKey() lodash方法:

var key = _.findKey(c, v => v === val)

其中val - 属性值。