我有一个非常简单的JavaScript对象,我将其用作关联数组。是否有一个简单的函数允许我获取值的键,或者我必须迭代对象并手动找到它?


当前回答

没有可用的标准方法。你需要迭代,你可以创建一个简单的helper:

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之外使用这个函数,并将对象传递给它。

其他回答

lodash way https://lodash.com/docs#findKey

Var用户= { 'barney':{'年龄':36,'活跃':true}, 'fred': {'age': 40, 'active': false}, '鹅卵石':{'年龄':1,'活动':true} }; _。findKey(users, {'age': 1, 'active': true}); //→'鹅卵石'

这为我获得对象的键/值工作。

让obj = { “key1”:“value1”, “key2”:“value2”, “key3”:“value3”, “key4”:“value4” } 种(obj) . map函数(k) { Console.log ("key with value: "+k +" = "+obj[k]) })

function getKeyByValue(object, value) {
  return Object.keys(object).find(key => object[key] === value);
}

ES6,没有原型突变或外部库。

的例子,

函数getKeyByValue(对象,值){ 返回种(对象)。Find (key =>对象[key] === value); } Const map = {"first": "1", "second": "2"}; console.log (getKeyByValue(地图,“2”));

好像这个问题还没有被打得稀烂似的……

这里有一个,不管它给你带来了什么好奇心……

如果你确定你的对象将只有字符串值,你可能真的会用尽自己来想象这个实现:

var o = { a: '_A', b: '_B', c: '_C' }
  , json = JSON.stringify(o)
  , split = json.split('')
  , nosj = split.reverse()
  , o2 = nosj.join('');

var reversed = o2.replace(/[{}]+/g, function ($1) { return ({ '{':'}', '}':'{' })[$1]; })
  , object = JSON.parse(reversed)
  , value = '_B'
  , eulav = value.split('').reverse().join('');

console.log('>>', object[eulav]);

也许这里有一些有用的东西……

希望这能让你开心。

这是Underscorejs方法的一个小扩展,并使用Lodash代替:

var getKeyByValue = function(searchValue) {
  return _.findKey(hash, function(hashValue) {
    return searchValue === hashValue;
  });
}

FindKey将搜索并返回与值匹配的第一个键。 如果你想要最后一个匹配,使用FindLastKey代替。