2016-04-06 44 views
1

我有一個對象,如:拿到鑰匙對應的值在JS對象

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但沒有成功。

+0

像'Object.keys(OBJ)' – Rayon

+0

您可以通過按鍵則有循環,檢查是否值匹配搜索。 –

+0

https://jsfiddle.net/rayon_1990/n0y75guq/ – Rayon

回答

7

您可以簡單地使用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; 
     } 
}; 
+0

它返回我下面的錯誤。返回Object.keys(object).find(key => object [key] === value); ^ SyntaxError:意外令牌> –

+0

@RISHABHBANSAL您的環境是否支持ES 6? –

+0

@RISHABHBANSAL嘗試使用編輯後的功能。 – void

3

試試這個誰。

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

如果有人對Lodash解決方案感興趣,下面是我常用的一個。此方法取反對象,交換值的鍵,然後通過查找該新對象的值來查找該鍵。

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

 
var getKey = function(obj, value) { 
 
\t var inverse = _.invert(obj); 
 
\t 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>