获取键/值 javascript 对象的键的最佳方法

IT技术 javascript jquery
2021-01-29 12:03:40

如果我有一个 JS 对象,例如:

var foo = { 'bar' : 'baz' }

如果我知道它foo具有基本的键/值结构,但不知道键的名称,那么获取它的最简单方法是什么?for ... in? $.each()? 我希望有更好的东西......

6个回答

您将使用 for 循环在对象内部进行迭代:

for(var i in foo){
  alert(i); // alerts key
  alert(foo[i]); //alerts key's value
}

或者

Object.keys(foo)
  .forEach(function eachKey(key) { 
    alert(key); // alerts key 
    alert(foo[key]); // alerts value
  });
@user2284570:我可以是一个字符串——没问题。
2021-03-19 12:03:40
如果我不想 alert() foo[i]if iissome string怎么办?
2021-03-21 12:03:40
如果我不想foo[i]成为"_proto_"怎么办?
2021-03-30 12:03:40
你不是说 for(var i in Object.keys(foo)) {
2021-04-09 12:03:40

您可以单独访问每个键而无需进行迭代,如下所示:

var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second
您现在可以为此目的使用扩展运算符,它看起来更好: const [firstKey, ...rest] = Object.keys(obj);
2021-04-08 12:03:40

如果您想获取所有密钥,ECMAScript 5 引入了Object.keys. 这仅受较新的浏览器支持,但MDC 文档提供了另一种实现(也使用for...inbtw):

if(!Object.keys) Object.keys = function(o){
     if (o !== Object(o))
          throw new TypeError('Object.keys called on non-object');
     var ret=[],p;
     for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
     return ret;
}

当然,如果您同时想要键和值,那么这for...in是唯一合理的解决方案。

p给了我钥匙,但我如何获得钥匙的value?谢谢。
2021-03-19 12:03:40
对于键和值,请使用新的 Object.entries() developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-03-25 12:03:40
呃...有没有其他人点击第一个链接被重定向到匿名麻醉品?
2021-03-28 12:03:40
也许这表明我的理解有限,但是对于像获取键/值这样简单的事情,这个答案似乎非常冗长(公认可重用)。@Michael Benin 的回答不应该被标记为最好的吗?
2021-04-11 12:03:40

鉴于您的对象:

var foo = { 'bar' : 'baz' }

要获取bar,请使用:

Object.keys(foo)[0]

要获取baz,请使用:

foo[Object.keys(foo)[0]]

假设单个对象

一个一个班轮为您提供:

const OBJECT = {
    'key1': 'value1',
    'key2': 'value2',
    'key3': 'value3',
    'key4': 'value4'
};

const value = 'value2';

const key = Object.keys(OBJECT)[Object.values(OBJECT).indexOf(value)];

window.console.log(key); // = key2