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

Edu*_*scu 6 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}
Run Code Online (Sandbox Code Playgroud)

要使用密钥获取值很简单,我只需使用key in c["UNKNOWN_ERR"]get 0,因为所有值都是唯一的,从值(errorcode)获取密钥(消息)是安全的.

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

Thi*_*ter 16

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

for(var key in c) {
    if(c[key] === whatever) {
        // do stuff with key
    }
}
Run Code Online (Sandbox Code Playgroud)


Far*_*uti 9

es6 find方法:

const getKey = (obj,val) => Object.keys(obj).find(key => obj[key] === val);
Run Code Online (Sandbox Code Playgroud)

在你的情况下

console.log(getKey(c,1)); // INDEX_SIZE_ERR
Run Code Online (Sandbox Code Playgroud)


Pra*_*tik 6

Underscore为此提供了更简单的解决方案

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

var errKey = _.invert(c)[errCode];
Run Code Online (Sandbox Code Playgroud)

如果你使用errCode = 3,如下所示

var errKey = _.invert(c)[3];
Run Code Online (Sandbox Code Playgroud)

然后

errKey 将会 HIERARCHY_REQUEST_ERR