4

I have an object such as :

var inspectionMapping = {'a_pillar_lh' : "A Pillar LH",
                       'b_pillar_lh'  : "B Pillar LH"};

console.log(inspectionMapping['a_pillar_lh']);
// Which gives me correct "A Pillar LH".

I am able to get the value corresponding to key.

But I am not able to get the key corresponding to value in javascript Object.

Such as I have "A Pillar LH" and I need to get the corresponding key which is a_pillar_lh.

I have tried to use indexOf but no success.

4
  • Something like Object.keys(obj) Commented Apr 6, 2016 at 10:43
  • You have to loop through the keys, checking if the value matches your search. Commented Apr 6, 2016 at 10:44
  • jsfiddle.net/rayon_1990/n0y75guq Commented Apr 6, 2016 at 10:51
  • @RayonDabre : Jsfiddle example works for me. Thanks buddy :) Commented Apr 6, 2016 at 11:04

3 Answers 3

11

You can simply fetch all the keys using Object.keys() and then use .find() function to get the key out from that array, and then nicely wrap it in a function to make it modular.

var inspectionMapping = {
  'a_pillar_lh': "A Pillar LH",
  'b_pillar_lh': "B Pillar LH"
};

Object.prototype.getKey = function(value) {
  var object = this;
  return Object.keys(object).find(key => object[key] === value);
};


alert(inspectionMapping.getKey("A Pillar LH"));

EDIT For those who don't want to use ES6

Object.prototype.getKey = function(value) {
      var object = this;
      for(var key in object){
         if(object[key]==value) return key;
      }
};
Sign up to request clarification or add additional context in comments.

10 Comments

Its returning me the below errror. return Object.keys(object).find(key => object[key] === value); ^ SyntaxError: Unexpected token >
@RISHABHBANSAL Does your environment supports ES 6?
@RajaprabhuAravindasamy : have tried but it is giving me error "has no method 'find'"
@RISHABHBANSAL find() is also a new installment to ES6. Better see the solution give below by me. Object.keys was introduced with ES5. So i guess that wont cause problems in your environment.
@void using for..in is dangerous at times. It will iterate over the enumerable properties until the end of the proto chain. Better to include hasOwnProperty check while using for..in over objects.
|
3

Try this.

Object.keys(inspectionMapping).find(key => inspectionMapping[key] === 'A Pillar LH');

Comments

0

If anyone is interested in a Lodash solution to this, here's one I commonly use. This method inverts the object, swapping keys for values, and then finds the key by looking up the value against this new object.

var inspectionMapping = {
	'a_pillar_lh': "A Pillar LH",
	'b_pillar_lh': "B Pillar LH"
};

var getKey = function( obj, value ) {
	var inverse = _.invert( obj );
	return _.get( inverse, value, false );
};

alert( 'The key for "A Pillar LH" is "' + getKey( inspectionMapping, 'A Pillar LH' ) + '"' );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.