我有一个非常简单的 JavaScript 对象,我将其用作关联数组。是否有一个简单的函数允许我获取值的键,或者我是否必须迭代对象并手动找到它?
如何通过值获取 JavaScript 对象中的键?
IT技术
javascript
object
2021-01-29 09:01:57
6个回答
function getKeyByValue(object, value) {
return Object.keys(object).find(key => object[key] === value);
}
ES6,没有原型突变或外部库。
例子,
function getKeyByValue(object, value) {
return Object.keys(object).find(key => object[key] === value);
}
const map = {"first" : "1", "second" : "2"};
console.log(getKeyByValue(map,"2"));
没有可用的标准方法。您需要迭代,您可以创建一个简单的帮助程序:
Object.prototype.getKeyByValue = function( value ) {
for( var prop in this ) {
if( this.hasOwnProperty( prop ) ) {
if( this[ prop ] === value )
return prop;
}
}
}
var test = {
key1: 42,
key2: 'foo'
};
test.getKeyByValue( 42 ); // returns 'key1'
一个警告:即使上述方法有效,扩展任何主机或本机对象的.prototype
. 我在这里这样做是因为它非常适合这个问题。无论如何,您可能应该在 之外使用此函数.prototype
并将对象传递给它。
如前所述,需要迭代。例如,在现代浏览器中,您可以:
var key = Object.keys(obj).filter(function(key) {return obj[key] === value})[0];
Wherevalue
包含您要查找的值。说到这里,我可能会使用循环。
否则你可以使用一个合适的“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);
使用Underscore.js库:
var hash = {
foo: 1,
bar: 2
};
(_.invert(hash))[1]; // => 'foo'
ES6+ 一个内胆
let key = Object.keys(obj).find(k=>obj[k]===value);
返回具有值的所有键:
let keys = Object.keys(obj).filter(k=>obj[k]===value);
其它你可能感兴趣的问题