在 JS 中查找对象特定值的键

新手上路,请多包涵

我有一个这样的对象,它是使用 lodash _.zipObject() 函数生成的。所以我有 2 个数组,一个位置,一个数字。

 var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147, …}

我需要根据输入值返回密钥。例如, function(304) 将返回 'Aberdeen'

我试过 _.findkey(locs, 304); 但这只是返回未定义。我尝试过的任何其他尝试总是返回未定义或 -1。不太确定从这里去哪里。

原文由 Sam Driver 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 847
2 个回答

要查找密钥,请使用带有 _.findKey() 的谓词函数:

 var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147 };

var key = _.findKey(locs, function(v) {
  return v === 304;
});

console.log(key);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

您可以通过柯里 _.eq() 使用请求的值来创建谓词:

 var locs = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147 };

var key = _.findKey(locs, _.curry(_.eq, 304));

console.log(key);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

原文由 Ori Drori 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用纯 Javascript 使用 Object#keys 函数获取所有键,然后与 Array#find 函数中的元素进行比较

 const obj = {'Aberdeen': 304, 'Aberystwith': 109, 'Belfast': 219, 'Birmingham': 24, 'Brighton': 147};

const key = Object.keys(obj).find(key => obj[key] === 304);

console.log(key);

使用 lodash 将谓词传递给函数

const key = _.findkey(locs, (value) => value === 304);

原文由 Suren Srapyan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题