JavaScript中如何根据匹配变量的值获取对象的键?
根据对象值获取对应键的实现方法
你有如下对象:
const obj = { "one@gmail.com": "email one", "two@gmail.com": "email two", }
想实现根据给定变量匹配的值获取对象的键,你给出的变量及代码片段如下:
var outputVal = "email two"; Object.entries(obj ).map(([key,value])=>{ if(outputVal === value){ console.log('output', key); }
修正与优化方案
你的思路是对的,但代码存在语法问题和方法选择的小瑕疵,以下是修正后的实现:
方法1:用forEach遍历(适合仅执行打印等操作)
const obj = { "one@gmail.com": "email one", "two@gmail.com": "email two", }; const outputVal = "email two"; Object.entries(obj).forEach(([key, value]) => { if (outputVal === value) { console.log('output', key); // 输出: output two@gmail.com } });
- 用
forEach替代map,因为map的核心作用是生成新数组,这里仅需遍历执行操作,forEach更贴合场景。 - 补全了代码中缺失的闭合括号与大括号,修复语法错误。
方法2:用find直接获取匹配键(更简洁)
如果只需要获取第一个匹配的键,可以用find方法直接返回结果:
const obj = { "one@gmail.com": "email one", "two@gmail.com": "email two", }; const outputVal = "email two"; const matchedKey = Object.entries(obj).find(([key, value]) => value === outputVal)?.[0]; console.log('output', matchedKey); // 输出: output two@gmail.com
?.[0]是可选链操作符,避免当没有匹配值时出现undefined访问报错。
方法3:处理多匹配值场景
如果对象中可能存在多个值相同的键,用filter收集所有匹配项:
const obj = { "one@gmail.com": "email one", "two@gmail.com": "email two", "three@gmail.com": "email two", }; const outputVal = "email two"; const matchedKeys = Object.entries(obj) .filter(([key, value]) => value === outputVal) .map(([key]) => key); console.log('output', matchedKeys); // 输出: output ["two@gmail.com", "three@gmail.com"]
内容的提问来源于stack exchange,提问作者Rohit Verma
相关产品推荐
相关产品推荐

