获取js对象中值对应的键

get key corresponding to value in js object

本文关键字:js 对象 获取      更新时间:2024-02-16

我有一个对象,例如:

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".

我能够得到与键对应的值。

但是我无法在javascript对象中获取值对应的键。

比如我有"A Pillar LH",我需要得到相应的密钥a_pillar_lh

我尝试过使用indexOf,但没有成功。

您可以简单地使用Object.keys()获取所有密钥,然后使用.find()函数从该数组中获取密钥,然后将其很好地封装在一个函数中,使其模块化。

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"));

编辑对于那些不想使用ES6 的人

Object.prototype.getKey = function(value) {
      var object = this;
      for(var key in object){
         if(object[key]==value) return key;
      }
};

试试这个。

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

如果有人对Lodash解决方案感兴趣,这里是我常用的解决方案。此方法反转对象,将关键帧交换为值,然后通过查找此新对象的值来找到关键帧。

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>