如何在Javascript中访问对象的第一个属性?

ato*_*gle 568 javascript object

是否有一种优雅的方式来访问对象的第一个属性...

  1. 你不知道你的房产名称的地方
  2. 不使用像for .. injQuery 那样的循环$.each

例如,我需要在foo1不知道foo1名称的情况下访问对象:

var example = {
    foo1: { /* stuff1 */},
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};
Run Code Online (Sandbox Code Playgroud)

Grz*_*zan 1304

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

使用此方法,您还可以通过索引访问其他属性.请注意!Object.keys根据ECMAScript不保证退货订单,但非正式地是所有主要浏览器实施,请阅读/sf/answers/1624146681/以获取详细信息.

  • 你说这不是最快的方式.什么方式会更快? (24认同)
  • @T Nguyen我会发布它,如果我知道:) (9认同)
  • 我希望`first()`或类似的东西可以解决这个问题. (9认同)
  • @DavChana - 您的基准设置错误了.*样板块*将始终执行,并且*block 2*为空,这意味着第一个结果表示执行*样板+块1*,第二个结果仅表示*样板*.__这是正确的基准:[http://jsben.ch/#/R9aLQ](http://jsben.ch/#/R9aLQ)__,显示它们非常相等(多次运行测试). (5认同)
  • 这不是非常有效,因为它创建了所有对象键的整个数组. (3认同)

Gum*_*mbo 108

在第一次迭代后尝试for … in循环并中断:

for (var prop in object) {
    // object[prop]
    break;
}
Run Code Online (Sandbox Code Playgroud)

  • 老答案但是.您可能想要检查属性是否属于该对象.喜欢:for(..){if(!obj.hasOwnProperty(prop))继续; ......休息 如果对象实际上是空的,它不会遍历原型或其他东西. (11认同)
  • var prop; for(prop in object)break; //对象[丙] (6认同)
  • 如果其他人担心顺序,大多数浏览器的行为都是可以预测的:http://stackoverflow.com/questions/280713/elements-order-in-a-for-in-loop (2认同)

gar*_*ing 47

你也可以Object.values(example)[0].

  • 我比“Object.keys”更喜欢这个,因为你肯定会得到第一个项目。 (3认同)
  • 从 2019 年更新,我认为这适用于除 IE 之外的大多数浏览器 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values (2认同)
  • @theUtherSide 所有“Object.keys”、“Object.values”和“for...in”的***顺序***都是相同的,唯一显着的区别是“for...in”循环也在原型链因此您必须手动检查那里的“hasOwnProperty()”。 (2认同)

ben*_*tah 45

使用Object.keys获取属性的数组对象上.例:

var example = {
    foo1: { /* stuff1 */},
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};

var keys = Object.keys(example); // => ["foo1", "foo2", "foo3"] (Note: the order here is not reliable)
Run Code Online (Sandbox Code Playgroud)

此处提供文档和跨浏览器垫片.其中一个例子可以在我的另一个答案中找到.

编辑:为清楚起见,我只想回应其他答案中正确陈述的内容:javascript对象中的键顺序未定义.


net*_*iul 24

一个规则版本:

var val = example[function() { for (var k in example) return k }()];
Run Code Online (Sandbox Code Playgroud)

  • 有时,在没有检查“ hasOwnProperty”的情况下使用“ for in”可能会很冒险,因为该对象包含以编程方式附加到其上的其他有害值,因此您最终可能会从此代码段中得到有害结果。仅仅因为它短而整洁并不意味着它的安全性最佳。 (2认同)

Que*_*tin 22

没有"第一"财产.对象键是无序的.

如果您遍历他们提供(var foo in bar)你会得到他们的一些订单,但它可能会在未来发生变化(特别是如果您添加或删除其他键).

  • 键/值顺序应保留在较新版本的 JS 中 (2认同)

poc*_*sov 12

使用lodash库的解决方案:

_.find(example) // => {name: "foo1"}
Run Code Online (Sandbox Code Playgroud)

但是不能保证对象属性内部存储顺序,因为它依赖于javascript VM实现.

  • 刚试过这个,它不起作用.它仅返回值,而不是键/值对. (2认同)
  • 在这个问题中没有提到它应该返回键/值对,他只是请求对象,接受的答案与lodash函数一样多:它返回第一个属性的内容。它可能不适合您的特定需求,但是根据原始问题,此答案是正确的。 (2认同)

kis*_*aru 11

最佳答案可以生成整个数组,然后从列表中捕获。这是另一个有效的捷径

var obj = { first: 'someVal' };
Object.entries(obj)[0][1] // someVal
Run Code Online (Sandbox Code Playgroud)


Ale*_*ski 9

否.由MDC定义的对象文字是:

包含零个或多个属性名称对象的列表,以及用大括号({})括起来的对象的关联值.

因此,对象文字不是数组,您只能使用显式名称或for使用in关键字的循环访问属性.

  • 对于其他人只看到这个答案的绿色标记,页面上还有另一个解决方案,目前有350个upvotes. (25认同)

Žel*_*vić 9

如果有人更喜欢数组解构

const [firstKey] = Object.keys(object);
Run Code Online (Sandbox Code Playgroud)


Die*_*nue 7

要获取对象中的第一个键名称,您可以使用:

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

返回一个字符串,因此您无法访问嵌套对象(如果有),例如:

var obj = { first: { someVal : { id : 1} };使用该解决方案,您无法访问 id。

如果您想获取实际对象,最好的解决方案是使用 lodash,例如:

obj[_.first(_.keys(obj))].id
Run Code Online (Sandbox Code Playgroud)

要返回第一个键的值(如果您不确切知道第一个键名称):

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

如果您知道密钥名称,只需使用:

obj.first
Run Code Online (Sandbox Code Playgroud)

或者

obj['first']
Run Code Online (Sandbox Code Playgroud)


Nti*_*tso 7

这是获取第一个密钥的更简洁的方法:

var object = {
    foo1: 'value of the first property "foo1"',
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};

let [firstKey] = Object.keys(object)

console.log(firstKey)
console.log(object[firstKey])
Run Code Online (Sandbox Code Playgroud)

  • 这是一个解构分配 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment (2认同)

Ham*_*eed 6

您可以使用Object.values()访问对象的值:

var obj = { first: 'someVal' };
Object.values(obj)[0]; // someVal
Run Code Online (Sandbox Code Playgroud)