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

spr*_*man 167 javascript jquery

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

var foo = { 'bar' : 'baz' }
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*nin 170

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

for(var i in foo){
  alert(i); // alerts key
  alert(foo[i]); //alerts key's value
}
Run Code Online (Sandbox Code Playgroud)

要么

Object.keys(foo)
  .forEach(function eachKey(key) { 
    alert(key); // alerts key 
    alert(foo[key]); // alerts value
  });
Run Code Online (Sandbox Code Playgroud)


use*_*r01 95

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

var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second
Run Code Online (Sandbox Code Playgroud)

  • 现在,您可以使用传播运营商为了这个目的,它看起来更好:```常量[firstKey,...休息] = Object.keys(OBJ);``` (2认同)

Fel*_*ing 90

如果你想获得所有密钥,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;
}
Run Code Online (Sandbox Code Playgroud)

当然,如果你想要两者,关键和价值,那么这for...in是唯一合理的解决方案.

  • 嗯...其他人单击第一个链接是否会重定向到匿名的麻醉品? (4认同)
  • 对于键和值,请使用新的 Object.entries() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries (2认同)

Ary*_*itz 57

鉴于你的对象:

var foo = { 'bar' : 'baz' }
Run Code Online (Sandbox Code Playgroud)

要获得bar,请使用:

Object.keys(foo)[0]
Run Code Online (Sandbox Code Playgroud)

要获得baz,请使用:

foo[Object.keys(foo)[0]]
Run Code Online (Sandbox Code Playgroud)

假设一个对象


Amj*_*d K 18

这是最简单易行的方法.这就是我们这样做的方式.

var obj = { 'bar' : 'baz' }
var key = Object.keys(obj)[0];
var value = obj[key];
     
 console.log("key = ", key) // bar
 console.log("value = ", value) // baz
Run Code Online (Sandbox Code Playgroud)


小智 18

一个一个班轮为您提供:

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
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 15

我遇到了同样的问题,这是有效的

//example of an Object
var person = {
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
};

//How to access a single key or value
var key = Object.keys(person)[0];
var value = person.firstName;
Run Code Online (Sandbox Code Playgroud)

  • 为什么不`var value = person [key];`?这样您就不必知道要拉的值的关键. (10认同)

aif*_*fin 13

// iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
  console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}
Run Code Online (Sandbox Code Playgroud)

请参阅MDN


Sah*_*kar 10

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

let obj = {
        'key1': 'value1',
        'key2': 'value2',
        'key3': 'value3',
        'key4': 'value4'
    }
    Object.keys(obj).map(function(k){ 
    console.log("key with value: "+k +" = "+obj[k])    
    
    })
    
Run Code Online (Sandbox Code Playgroud)


小智 8

我没有看到别的东西for (var key in foo).


Dav*_*ard 5

既然您提到了$.each(),这里有一个适用于 jQuery 1.6+ 的便捷方法:

var foo = { key1: 'bar', key2: 'baz' };

// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
  return key;
});
Run Code Online (Sandbox Code Playgroud)


sam*_*nau 5

最简单的方法是使用 Underscore.js:

钥匙

_.keys(object) 检索对象属性的所有名称。

_.keys({一: 1, 二: 2, 三: 3}); => [“一”、“二”、“三”]

是的,您需要一个额外的库,但这太容易了!

  • @lonesomeday 是的,但下划线/lodash 在许多其他方面都很有用,所以值得提出。 (4认同)