Get key using value from an object in JavaScript?

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}

To get the value using the key is easy, I just use the key in c["UNKNOWN_ERR"] to get 0, given that all the values are unique is safe to get the key (message) from the value(errorcode).

Is there a standard way to do that or do I need to write a function that looks in all key and search that specific value?

Answers


As you already assumed you need to iterate over the object's attributes and check the value.

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

es6 find method:

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

in your case

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

Underscore provides a more easy solution to this

You can get key using this code also

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

for e.x. if you use errCode = 3 as shown below

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

then

errKey will be HIERARCHY_REQUEST_ERR


Try findKey() lodash method:

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

where val - property value.


Need Your Help

Why does Logcat not print a log when the tag starts with "IMS"?

android android-studio logcat

Why does Logcat not print a log when the tag starts with "IMS"?

Get Boolean and Integer values unquoted from Restful service in Glassfish v3

rest jaxb jersey glassfish-3

I'm using the JaxRs Service to do RESTFul communication to the PHP Application.