所以我试图通过值来获取对象键,以节省必须使用反向键和值创建重复对象的时间。
无论是从值返回键的函数还是我错过了内置方法,我都不在乎。我只需要一种方法来获取密钥。
示例:
var user = {'name':'john', 'age':26, 'gender':'male'}
getKey(user.male) // Would return 'gender'?
是否有一种简单的方法可以获得它或是否需要一个功能?
答案 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"]
答案 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');
}
现在您可以获得多个密钥!