【问题标题】:How to get a key of a value from a java script Object? [duplicate]如何从 javascript 对象中获取值的键? [复制]
【发布时间】: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

【问题讨论】:

  • 查看同一问题的答案:stackoverflow.com/questions/9907419/…
  • 需要注意的是,这不是一个多维数组。您的代码中没有数组。这是一个对象,其中每个键都是字符串,值是对象。数组将是 [1,2,3]
  • 我同意它不是一个数组,而是一个对象。感谢您的纠正,感谢大家的帮助。

标签: javascript arrays multidimensional-array


【解决方案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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多