如何在JavaScript中通过值获取对象的键?

7
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,假设所有值都是唯一的,则从值(错误代码)获取键(消息)是安全的。

是否有标准的方法来实现这一点,还是我需要编写一个函数来查找所有键并搜索特定的值?


1
可能是获取JavaScript键/值对象键的最佳方法的重复问题。 - Andy
可能是 https://dev59.com/kmkw5IYBdhLWcg3waZ74 的重复问题。 - user6913790
4个回答

18

正如你已经猜到的那样,你需要遍历对象的属性并检查其值。

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

13

ES6 find 方法:

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

在你的情况下

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

当值为0时,这个不起作用。 - Non404

6

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

你也可以使用以下代码获取key

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

例如,如果您如下所示使用errCode = 3
var errKey = _.invert(c)[3];

然后

errKey 将会是 HIERARCHY_REQUEST_ERR


2

尝试使用lodash中的 findKey() 方法:

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

其中 val - 属性值。


原始问题似乎并不涉及外部库。 - Matteo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接