You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中通过键值对的值获取对应的键?

通过值反向查找对象的键

嘿,我懂你的困扰——JavaScript对象本身确实没有内置的反向查找方法,你直接用tabList[#media]不行有两个原因:一是#media不是合法的语法(得用引号包起来变成'#media'),二是对象的键是数字0-4,它根本没有'#media'这个键,所以当然拿不到对应的值~

下面给你几种实用的解决办法:

方法1:写一个遍历查找的函数

如果只是偶尔需要反向查找,写个小函数遍历对象就行:

function getKeyByValue(obj, targetValue) {
  // 遍历对象的每个键
  for (const key in obj) {
    // 只检查对象自身的属性(避免原型链上的属性干扰)
    if (obj.hasOwnProperty(key)) {
      // 找到匹配的值就返回对应的键
      if (obj[key] === targetValue) {
        return key;
      }
    }
  }
  // 如果没找到匹配值,返回null或者你需要的默认值
  return null;
}

// 用你的对象测试一下
var tabList = {0:'#description', 1:'#media', 2:'#attributes', 3:'#calendar', 4:'#pricing'};
console.log(getKeyByValue(tabList, '#media')); // 输出 '1'
console.log(getKeyByValue(tabList, '#pricing')); // 输出 '4'

方法2:预先创建反向映射对象

如果需要频繁做反向查找,建议提前生成一个值→键的反向对象,这样每次查找都是O(1)的效率,比遍历快很多:

var tabList = {0:'#description', 1:'#media', 2:'#attributes', 3:'#calendar', 4:'#pricing'};
// 创建反向映射
const reverseTabMap = {};
for (const key in tabList) {
  if (tabList.hasOwnProperty(key)) {
    // 把原对象的值作为新对象的键,原对象的键作为新对象的值
    reverseTabMap[tabList[key]] = key;
  }
}

// 现在直接用值找键就很方便啦
console.log(reverseTabMap['#media']); // 输出 '1'
console.log(reverseTabMap['#attributes']); // 输出 '2'

注意点:处理重复值的情况

如果你的对象里存在重复的value,上面的方法只会返回最后一个匹配的键(因为后面的键会覆盖前面的)。如果需要返回所有匹配的键,可以把函数改成返回数组:

function getKeysByValue(obj, targetValue) {
  const matchedKeys = [];
  for (const key in obj) {
    if (obj.hasOwnProperty(key) && obj[key] === targetValue) {
      matchedKeys.push(key);
    }
  }
  return matchedKeys;
}

内容的提问来源于stack exchange,提问作者xslibx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:06:58