如果我有一个JS对象:

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

如果我知道foo有基本的键/值结构,但不知道键的名称,我怎么能得到它?为…在吗?$ . each () ?


当前回答

我也遇到过同样的问题,这个方法很有效

//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[key];

其他回答

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

键 _.keys(对象) 检索对象属性的所有名称。 _.键({一:1,二:2,三:3}); =>["一","二","三"]

是的,你需要一个额外的库,但它是如此简单!

如果你想获得所有的键,ECMAScript 5引入了Object.keys。这只有较新的浏览器支持,但MDC文档提供了另一种实现(它也用于…顺便说一句):

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。是唯一合理的解决办法。

// 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"
}

参考MDN

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

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

美元。每个都是一个库结构,而对于…In是原生js,这应该更好