Js对象怎么通过value值拿到key值?

一般通过obj.key可以拿到value,那我要反过来,该怎么做?

阅读 30.8k
8 个回答

我有个笨方法

遍历对象,判断当前对象的 value 是否等于要查的值,如果匹配到输出key

参考一下,如果用 lodash 可以直接用 _.findKey

var data = {
  a: 1,
  b: 'string',
  c: {},
  d: {a: 98, b: 'str'}
}

function findKey (value, compare = (a, b) => a === b) {
  return Object.keys(data).find(k => compare(data[k], value))
}

var val = data.b
findKey(val) // b

// 自定义比较函数,比如结合 lodash 可以
findKey({a: 98, b: 'str'}, _.isEqual) // d

能循环拿吗?$.each这样拿出来

keyvalue的映射是单向的,并且value并不具有唯一性。
所以由key拿到value是没有问题的,但是反之则不行。

for...in循环对象判断获取?

输出 value 并不是唯一的,通过 value 拿到可以不行 。

var string1 = 'aabbbbcc';

mostChart(string1);
function mostChart(string) {
    //建立空对象
    var strObject = {};
    //初始化对象
    for (let i = 0; i < string1.length; i++) {
        strObject[string1[i]] = 0; //对象的key值为字符串中的字符
    }
    //开始对元素进行计数
    for (let i = 0; i < string1.length; i++) {
        strObject[string1[i]]++;
    }
    //找出对象的value值中最大的
    var max = 0;
    for (let i in strObject) {
        if (strObject[i] > max) {
            max = strObject[i];
        }
    }
    //根据对象的value值输出key值
    for (let i in strObject) {
        if (strObject[i] === max) {
            console.log(i);
        }
    }
    }
新手上路,请多包涵
function findKeyByValue(obj, value) {
  for(let key in obj) {
    if (obj[key] === value) {
      return key 
    }
  }
  return null
}
// test 
let obj2 = {name: "cc", age:22, job: "teacher"}
findKeyByValue(obj2, 22)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题