Javascript 如何获取对象的第一个关键点?

Javascript 如何获取对象的第一个关键点?,javascript,object,Javascript,Object,我有一个对象,我想访问该对象的第一个元素,所以首先,我需要获取该对象的第一个键。我有两种方法,但我正在寻找更好的方法 第一个是: var firstKey = Object.keys(myObject)[0]; var firstKey = null; for(var key in myObject){ firstKey = key; break; } 但是Object.keys将返回所有键的数组。因此,如果我只想要第一个键,这种方法对于我的任务来说太昂贵了(特别是当myOb

我有一个对象,我想访问该对象的第一个元素,所以首先,我需要获取该对象的第一个键。我有两种方法,但我正在寻找更好的方法

第一个是:

var firstKey = Object.keys(myObject)[0];
var firstKey = null;
for(var key in myObject){
    firstKey = key;
    break;
}
但是
Object.keys
将返回所有键的数组。因此,如果我只想要第一个键,这种方法对于我的任务来说太昂贵了(特别是当
myObject
有太多键时)

第二种方法是:

var firstKey = Object.keys(myObject)[0];
var firstKey = null;
for(var key in myObject){
    firstKey = key;
    break;
}
这很好用,比第一个更好,但我认为这很可怕(
for
break
和所有那些乱七八糟的东西,只是为了得到第一把钥匙)

So

我想知道是否有一种更优雅的方式来获得第一把钥匙?比如:

var firstKey from myObject;
编辑:

var firstKey = Object.keys(myObject)[0];
var firstKey = null;
for(var key in myObject){
    firstKey = key;
    break;
}
我不在乎顺序,我只想得到第一把钥匙是什么

EDIT2:

var firstKey = Object.keys(myObject)[0];
var firstKey = null;
for(var key in myObject){
    firstKey = key;
    break;
}

我有一个保存一些信息的对象(比如说,一个人的名字是一个键,他的电子邮件是值)。假设我有一个占位符,其中打印了一些名字和它的电子邮件地址。如果我按delete键,我会删除该条目(
delete myObject[name];
),然后我需要用另一个名称和电子邮件填充该占位符(我不在乎谁会这样做),所以第一个(或者不管第一个是什么)就可以了。

唯一不会收集数组中所有属性的方法是
for…in
一个

您始终可以将其移动到函数中,以获得更好的抽象:

function firstKey(obj) {
  for (var key in obj)
    if (Object.getOwnPropertyDescriptor(obj, key))
      return key;
}
firstKey({a: 1}); // "a"
firstKey({});     // undefined
但是,请注意,它不会得到很好的定义,因为
for…in
Object.key
使用依赖于实现的顺序

如果[[OwnPropertyKeys]]返回一个迭代器,并且有某种方法公开它,那就更好了:

Object.getOwnPropertyNamesIterator(obj).next().value; // this does not exist :(

唯一不会收集数组中所有属性的方法是
for…in
one

您始终可以将其移动到函数中,以获得更好的抽象:

function firstKey(obj) {
  for (var key in obj)
    if (Object.getOwnPropertyDescriptor(obj, key))
      return key;
}
firstKey({a: 1}); // "a"
firstKey({});     // undefined
但是,请注意,它不会得到很好的定义,因为
for…in
Object.key
使用依赖于实现的顺序

如果[[OwnPropertyKeys]]返回一个迭代器,并且有某种方法公开它,那就更好了:

Object.getOwnPropertyNamesIterator(obj).next().value; // this does not exist :(
引自(我强调):

for…in
语句以任意的顺序迭代对象的可枚举属性

该局:

Object.keys()
方法返回给定对象自身可枚举属性的数组,其顺序与
for…in
循环提供的顺序相同(区别在于for in循环也枚举原型链中的属性)

所以第一个键的概念是模糊的。关于JavaScript对象中的属性顺序已经说了很多。你可能想通过

可以考虑使用A(而不是纯对象)(显然)动态属性。

Map
还存储键/值对,但保证保持插入顺序

下面是一个示例,说明如何设置一些键/值对,然后获取第一个键/值对。然后删除第一个,下一个成为第一个:

让mp=newmap().set('x',1)
.set('y',3)
.set('z',14);
让key=mp.keys().next().value;
log('删除前,第一个键为:',键);
mp.删除(键);
key=mp.keys().next().value;
log('删除后,第一个键是:',键)引自(我突出显示):

for…in
语句以任意的顺序迭代对象的可枚举属性

该局:

Object.keys()
方法返回给定对象自身可枚举属性的数组,其顺序与
for…in
循环提供的顺序相同(区别在于for in循环也枚举原型链中的属性)

所以第一个键的概念是模糊的。关于JavaScript对象中的属性顺序已经说了很多。你可能想通过

可以考虑使用A(而不是纯对象)(显然)动态属性。

Map
还存储键/值对,但保证保持插入顺序

下面是一个示例,说明如何设置一些键/值对,然后获取第一个键/值对。然后删除第一个,下一个成为第一个:

让mp=newmap().set('x',1)
.set('y',3)
.set('z',14);
让key=mp.keys().next().value;
log('删除前,第一个键为:',键);
mp.删除(键);
key=mp.keys().next().value;

log('删除后,第一个键是:',键)你所说的“该对象的第一个元素”是什么意思?在一个对象中确实没有“第一个”键。例如,
Object.keys(myObject)[0]
将为您提供大多数浏览器中首先创建的密钥,但这并不确定。@Oriol的可能副本:
Object.keys
的顺序取决于ES5之前的实现。在ES5之后,它是在规范中定义的。我知道,有一个无序的集合来进行排序是愚蠢的,但这正是人们所要求的。目前所有浏览器和node.js都支持指定的顺序,但babel等跨编译器不支持。顺便说一句,即使指定了对象中属性的顺序,也不应该依赖它。指定的顺序是:看起来像整数的键总是排在第一位并按数字顺序排列,然后所有其他属性按插入顺序排列。所以,如果有人给你的对象添加了一个数字键,那么你就完蛋了。你说的“该对象的第一个元素”是什么意思?在一个对象中确实没有“第一个”键。例如,
Object.keys(myObject)[0]
将为您提供大多数浏览器中首先创建的密钥,但这并不确定。P