我有一个非常简单的JavaScript对象,我将其用作关联数组。是否有一个简单的函数允许我获取值的键,或者我必须迭代对象并手动找到它?
当前回答
保持原型干净。
function val2key(val,array){
for (var key in array) {
if(array[key] == val){
return key;
}
}
return false;
}
例子:
var map = {"first" : 1, "second" : 2};
var key = val2key(2,map); /*returns "second"*/
其他回答
最短一行
let key = Object.keys(obj).find(k=>obj[k]===value);
返回值为:
let keys = Object.keys(obj).filter(k=>obj[k]===value);
如果value为数组或对象:
let keys = Object.keys(obj).filter(k=>JSON.stringify(obj[k])===JSON.stringify(value));
这为我获得对象的键/值工作。
让obj = { “key1”:“value1”, “key2”:“value2”, “key3”:“value3”, “key4”:“value4” } 种(obj) . map函数(k) { Console.log ("key with value: "+k +" = "+obj[k]) })
真的很简单。
const CryptoEnum = Object.freeze({
"Bitcoin": 0, "Ethereum": 1,
"Filecoin": 2, "Monero": 3,
"EOS": 4, "Cardano": 5,
"NEO": 6, "Dash": 7,
"Zcash": 8, "Decred": 9
});
Object.entries(CryptoEnum)[0][0]
// output => "Bitcoin"
如前所述,迭代是必要的。例如,在现代浏览器中,你可以有:
var key = Object.keys(obj).filter(function(key) {return obj[key] === value})[0];
value包含了你要找的值。 说到这里,我可能会使用循环。
否则,你可以使用一个合适的“hashmap”对象——在JS中有几个实现——或者你自己实现。
更新2018
六年过去了,但我仍然得到了一些投票,所以我觉得一个更现代的解决方案——适用于现代浏览器/环境——应该在答案中提到,而不仅仅是在评论中:
const key = Object.keys(obj).find(key => obj[key] === value);
当然它也可以是一个函数:
const getKeyByValue = (obj, value) =>
Object.keys(obj).find(key => obj[key] === value);
function extractKeyValue(obj, value) {
return Object.keys(obj)[Object.values(obj).indexOf(value)];
}
用于闭包编译器提取编译后未知的键名
更性感的版本,但使用未来对象。项功能
function objectKeyByValue (obj, val) {
return Object.entries(obj).find(i => i[1] === val);
}