如何从 javascript 对象中获取值的键? [复制]
Posted
技术标签:
【中文标题】如何从 javascript 对象中获取值的键? [复制]【英文标题】:How to get a key of a value from a java script Object? [duplicate] 【发布时间】:2019-08-07 03:44:02 【问题描述】:下面是一个js对象的例子:
var arr =
"a1": "0.25": 13, "0.5": 50,
"a2": "0.5": 50, "0.75": 113, "1": 202
id = 'a1';
key = "0.25";
function myFunc(id, key)
return arr[id][key];
使用上面的函数我可以得到对应键的值。
我的问题是如何获取给定值的密钥?
例如如果 id = 'a2' 且 value = 113,则函数应返回对应的键 0.75
【问题讨论】:
查看同一问题的答案:***.com/questions/9907419/… 需要注意的是,这不是一个多维数组。您的代码中没有数组。这是一个对象,其中每个键都是字符串,值是对象。数组将是[1,2,3]
。
我同意它不是一个数组,而是一个对象。感谢您的纠正,感谢大家的帮助。
【参考方案1】:
使用Object.entries()
和Array#find
var arr ="a1": "0.25": 13, "0.5": 50,"a2": "0.5": 50, "0.75": 113, "1": 202
var a = 'a2',val = 113;
var Key = (a,val) => Object.entries(arr[a]).find(i=> i[1] == val)[0];
console.log(Key(a,val))
【讨论】:
旁注:- 值得一提的是 find 只会给出第一个匹配值的键。如果有多个匹配值,则不会返回所有键 @CodeManiac .Op 不提多重匹配【参考方案2】:您可以先获取arr[a]
的密钥,然后根据value
过滤key
var arr ="a1": "0.25": 13, "0.5": 50,"a2": "0.5": 50, "0.75": 113, "1": 202
let a = 'a1',val = 13;
let getKey = (a,val) => Object.keys(arr[a]).filter(e => arr[a][e] === val)
console.log(getKey(a,val))
console.log(getKey('a2',113))
如果您确定总是有一个具有匹配值的键,或者您只想要第一个匹配值的键,那么您可以使用find
而不是过滤器
var arr ="a1": "0.25": 13, "0.5": 50,"a2": "0.5": 50, "0.75": 113, "1": 202
let a = 'a1',val = 13;
let getKey = (a,val) => Object.keys(arr[a]).find(e => arr[a][e] === val)
console.log(getKey(a,val))
console.log(getKey('a2',113))
【讨论】:
这是一个数组吗? @BhojendraRauniyar 因为我使用过滤器以防万一有多个键具有价值而不是我获取所有键 我的意思是 OP 调用数组的对象。您应该在答案中声明这不是数组。 @BhojendraRauniyar 哎呀,我以为第一个 sn-p 的输出在数组中:P OP 已经用正确的命名更新了他的问题【参考方案3】:您可以使用Object.entries
获取密钥
var arr =
"a1":
"0.25": 13,
"0.5": 50
,
"a2":
"0.5": 50,
"0.75": 113,
"1": 202
function myFunc(a, key)
var k = Object.entries(arr[a]).flat();
return k[k.indexOf(key) - 1]
console.log(myFunc('a1', 13))
【讨论】:
以上是关于如何从 javascript 对象中获取值的键? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
从javascript中的键和字符串值获取objectId [重复]