如何使用其值获取密钥名称(在哈希中)?

时间:2012-03-14 21:09:59

标签: javascript jquery prototypejs

我知道这有点不正统。

让我说我有这个哈希。

 someHash = {
    'item1' => '5',
    'item2' => '7',
    'item3' => '45',
    'item4' => '09'
}

使用原生js,原型或Jquery - 是否有一种方法可以让我通过获取值获得“关键名称”?

我不想要所有的钥匙,只需要与我的价值相匹配的钥匙。像反向地图一样排序?

我从db获得了一个返回值,我得到一个“值”,我必须将该值与前端的一些js hash匹配。

所以应用程序递给我“45”......有没有办法使用js(原型或jquery)来获得键“item3”?

8 个答案:

答案 0 :(得分:5)

为了获得映射到给定值的,您需要搜索对象属性。例如

function getKeysForValue(obj, value) {
  var all = [];
  for (var name in obj) {
    if (Object.hasOwnProperty(name) && obj[name] === value) {
      all.push(name);
    }
  }
  return all;
}

答案 1 :(得分:5)

使用underscore.js:

_.invert(someHash)[value]

答案 2 :(得分:2)

没有直接的方法,但你可以尝试这样的事情。

var key;
$.each(someHash, function(key, val){
    if(val == 'valToCompare'){
        key = key;
        return false;
    }
});

答案 3 :(得分:2)

没有唯一性,你可以得到第一个:

var hash = {item1: 0, item2: 1},
    value = 1,
    key;
for(var i in hash)
{
    if (hash.hasOwnProperty(i) && hash[i] === value) {
        key = i;
        break;
    }
}
key; // item2

hasOwnProperty确保哈希的属性不是原型。

一旦找到密钥,

break就会停止循环。

答案 4 :(得分:2)

我不知道原生答案,但你可以写自己的答案:

var someHash = {
  'item1' : '5',
  'item2' : '7',
  'item3' : '45',
  'item4' : '09'
};

function getKeyByValue(hash, value) {
  var key;
  for(key in hash) {
    if (hash[key] == value) return key;
  }
}

alert(getKeyByValue(someHash, '7'));

答案 5 :(得分:0)

也许array_flip可以帮到你。这使得一个新的数组中的键是值,反之亦然。然后,只需查找该新数组中的键,结果值就是您要查找的原始数组中的键。

答案 6 :(得分:0)

循环穿过对象。

function findInObj(obj, needle)
    for(var x in obj){
      if(obj.x==needle) return x;
    }
    return false;
}

答案 7 :(得分:0)

由于对象中的多个属性可以具有相同的值, 您可以返回与该值匹配的属性名称数组。

var someHash={
    'item1':'5',
    'item2':'7',
    'item3':'45',
    'item4':'09',
    'item5':'7'
}
function hasAny(what){
    var names= [];
    for(var p in this){
        if(this[p]=== what) names.push(p);
    }
    return names;
}

hasAny.call(someHash,'7');

/ *返回值:(数组) ITEM2,ITEM5 * /