对象密钥通过值

时间:2014-03-27 01:08:52

标签: javascript object

所以我试图通过值来获取对象键,以节省必须使用反向键和值创建重复对象的时间。

无论是从值返回键的函数还是我错过了内置方法,我都不在乎。我只需要一种方法来获取密钥。

示例:

var user = {'name':'john', 'age':26, 'gender':'male'}
getKey(user.male) // Would return 'gender'?

是否有一种简单的方法可以获得它或是否需要一个功能?

3 个答案:

答案 0 :(得分:5)

直接的方法是简单地循环对象并检查值:

getKey = function (object, value) {
    for (var key in object) {
        if (!object.hasOwnProperty(key)) continue;

        if (object[key] == value) return key;
    }

    return undefined;
}

演示:

> getKey({'name':'john', 'age':26, 'gender':'male'}, 'male');
'gender'

答案 1 :(得分:2)

始终可以修改Object原型:

Object.prototype.getByValue = function(value) {
    var arr = [];
    for (var key in this) {
        if (this.hasOwnProperty(key)) {
            if (this[key] == value)
                arr.push(key);
        }
    }
    return arr;
}

var user = {'name':'john', 'age':26, 'gender':'male'}
var keys = user.getByValue("male");
console.log(keys); //["gender"]

演示:http://jsfiddle.net/7jXu2/

答案 2 :(得分:1)

喜欢:

function getKeys(obj, val){
  var a = [];
  for(var i in obj){
    if(obj[i] === val){
      a.push(i);
    }
  }
  if(a.length > 0){
    return a;
  }
  return 0;
}
var user = {name:'john', age:26, gender:'male'};
var males = getKeys(user, 'male');
if(males){
  for(var i in males){
    console.log(males[i]);
  }
}
else{
  console.log('No males were found');
}

现在您可以获得多个密钥!