我知道这有点不正统。
让我说我有这个哈希。
someHash = {
'item1' => '5',
'item2' => '7',
'item3' => '45',
'item4' => '09'
}
使用原生js,原型或Jquery - 是否有一种方法可以让我通过获取值获得“关键名称”?
我不想要所有的钥匙,只需要与我的价值相匹配的钥匙。像反向地图一样排序?
我从db获得了一个返回值,我得到一个“值”,我必须将该值与前端的一些js hash匹配。
所以应用程序递给我“45”......有没有办法使用js(原型或jquery)来获得键“item3”?
答案 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 * /