Javascript 基于对象内的值获取对象键

Javascript 基于对象内的值获取对象键,javascript,lodash,Javascript,Lodash,我正在尝试获取与某个值关联的密钥。如果我使用这个: function findKpiAttrName (obj, value) { _.each(obj, function (v, k) { if (v.hasOwnProperty('name') && v.name === value) { return k } }); } var attrKey = findKpiAttrName(obj, 'KPI Name'); 如果我console.log(attr

我正在尝试获取与某个值关联的密钥。如果我使用这个:

function findKpiAttrName (obj, value) {
  _.each(obj, function (v, k) {
    if (v.hasOwnProperty('name') && v.name === value) { return k }
  });
}

var attrKey = findKpiAttrName(obj, 'KPI Name');
如果我
console.log(attrKey)
它返回
undefined
,但我知道它正在查找一些东西,因为如果我
console.log(k)
在上述方法中,它会很好地打印出来。我缺少的范围有什么问题吗?顺便说一下,我正在使用ES5


任何帮助都将是伟大的!谢谢

可能是这样的:

function findKpiAttrName (obj, value) {
  let d = null;
  _.each(obj, function (v, k) {
    if (v.hasOwnProperty('name') && v.name === value) { d = k; return false; }
  });
  return d;
}
或者这可能更好:

function findKpiAttrName(obj, value) {
  for (let [k, v] of Object.entries(obj)) {
    if ( v.hasOwnProperty('name') && v.name === value) {
      return k;
    }
  }
}

不幸的是,我不明白为什么return语句不起作用。但是,我可以建议我回答这个问题的方法:

function findKpiAttrName (obj, value) {
  let keys = Object.keys(obj);
  return keys.find(function (key) {
    if (obj[key] === value) return true;
  })
}


我希望这有帮助

这个怎么样?此项不需要使用lodash=)

函数findKpiAttrName(对象、值){
返回对象。键(对象)。过滤器(函数(键){
返回对象[键]==值;
}).pop();
};
console.log(findKpiAttrName({
名称:“KPI名称”,
价值:42

}(“KPI名称”)您也可以通过和
无洛达斯一行:

let obj={name:'KPI name',值:42}
设fn=(o,i)=>(Object.entries(o).find([k,v])=>v==i)| |[])[0]
log(fn(obj,'KPI Name'))//Name
log(fn(obj,42))//值

console.log(fn(obj,null))//未定义的
每个
都不会返回任何内容。@davidbuzatto好的,所以即使我删除了
返回
它仍然会做相同的事情。对象可以只有一个属性吗?@Dementic是的,它将只有一个属性。您可以添加输入对象吗?如果我们可以看到您正在处理的对象格式,那么就更容易了。
返回object.keys(obj).find(key=>obj[key]==value)