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

IT技术 javascript object
2021-01-11 06:04:23

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

  1. 您不知道您的房产名称的地方
  2. 不使用类似for .. in或 jQuery 的循环$.each

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

var example = {
    foo1: { /* stuff1 */},
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};
6个回答
var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'

使用它,您还可以通过索引访问其他属性。请注意!Object.keysECMAScript 不保证退货顺序,但非正式地,所有主要浏览器的实现都是如此,请阅读https://stackoverflow.com/a/23202095以了解有关此内容的详细信息。

@T Nguyen 如果我知道,我会发布它:)
2021-03-17 06:04:23
这不是很有效,因为它创建了所有对象键的整个数组。
2021-03-21 06:04:23
我希望first()或类似的东西可以处理这个问题。
2021-04-04 06:04:23
你说这不是最快的方法。什么方式会更快?
2021-04-05 06:04:23
@DavChana - 你的基准设置错误。板块将始终被执行,并且您的块 2是空的,这意味着第一个结果代表执行样板+块1,而第二个结果仅代表样板这是正确的基准测试:http : //jsben.ch/#/R9aLQ,显示它们几乎相等(多次运行测试)。
2021-04-05 06:04:23

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

for (var prop in object) {
    // object[prop]
    break;
}
如果其他人担心顺序,大多数浏览器的行为都是可以预见的:stackoverflow.com/questions/280713/...
2021-03-11 06:04:23
我认为这是唯一的选择。我不确定你是否保证这些属性会以可预测/有用的顺序迭代。即,您可能想要 foo1 但得到 foo3。如果属性按示例编号,您可以进行字符串比较以确定以“1”结尾的标识符。再说一次,如果序数是集合的主要关注点,那么您可能应该使用数组而不是对象。
2021-03-15 06:04:23
var 道具;for (prop in object) break; //对象[道具]
2021-03-17 06:04:23
旧答案但是。您可能想要检查该属性是否属于该对象。像: for(..){ if(!obj.hasOwnProperty(prop)) continue; .... 休息; 以防万一对象实际上是空的,它不会遍历原型或其他东西。
2021-04-05 06:04:23

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

@theUtherSide所有,顺序都相同,唯一显着的区别是原型链上的循环也因此您必须手动检查那里。Object.keysObject.valuesfor...infor...inhasOwnProperty()
2021-03-11 06:04:23
这并非在所有浏览器中都可用,参考stackoverflow.com/a/38748490/719689
2021-03-12 06:04:23
从 2019 年更新,我认为这适用于除 IE 之外的大多数浏览器developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-03-29 06:04:23
我比 更喜欢这个Object.keys,因为你肯定会得到第一个项目。
2021-04-03 06:04:23

使用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)

此处提供文档和跨浏览器 shim 它的使用示例可以在我的另一个答案中找到

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

没有“第一”属性。对象键是无序的。

如果您使用 for 循环遍历它们,(var foo in bar)您将按某种顺序获取它们,但将来可能会发生变化(特别是如果您添加或删除其他键时)。

惊人的。我一直在使用一个对象来实现一个维护插入顺序的映射。一旦我删除了一个值,就会中断,因为下一次插入会填补空白。:(
2021-03-14 06:04:23
键/值顺序应保留在较新版本的 JS 中
2021-03-16 06:04:23