45

我只需要从 JavaScript 中一个相当大的关联数组中获取第一项(实际上只是第一个键)。这是我目前的做法(使用 jQuery):

getKey = function (data) {
    var firstKey;
    $.each(data, function (key, val) {
        firstKey = key;
        return false;
    });
    return firstKey;
};

只是猜测,但我想说必须有一种更好(阅读:更有效)的方式来做到这一点。有什么建议么?

更新:感谢您富有洞察力的答案和评论!我忘记了我的 JavaScript 101,其中规范说你不能保证关联数组中的特定顺序。不过,有趣的是,大多数浏览器都以这种方式实现它。我不希望在获得第一个键之前对数组进行排序,但考虑到我的用例,这可能是不可避免的。

4

3 回答 3

70

您可以通过引用从返回的第一个条目来避免创建函数Object.keys()

var firstKey = Object.keys(data)[0];

对于排序键列表中的第一个条目,只需添加对.sort()方法的调用:

var firstKey = Object.keys(data).sort()[0];
于 2014-10-28T20:34:01.663 回答
45

关联数组(即对象)中实际上没有第一个最后一个元素。您希望获得的唯一顺序是解析器保存元素的顺序——并且不保证与此一致。

但是,如果你想第一个出现,经典的方式实际上可能更容易一些:

function getKey(data) {
  for (var prop in data)
    return prop;
}

想要避免继承属性?

function getKey(data) {
  for (var prop in data)
    if (data.propertyIsEnumerable(prop))
      return prop;
}
于 2008-10-07T03:55:51.627 回答
2

除了 Jonathan 的解决方案,我们还可以扩展默认的数组功能:

Array.prototype.getKey = function() {
  for (var prop in this)
    if (this.propertyIsEnumerable(prop))
      return prop;
}
于 2012-11-01T14:36:32.020 回答