web-dev-qa-db-ja.com

JavaScriptの連想配列から最初の項目を取得する最も効率的な方法は何ですか?

JavaScriptでかなり大きな連想配列から最初の項目(実際には最初のキー)だけを取得する必要があります。これが私が現在行っている方法です(jQueryを使用)。

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

推測するだけですが、これを行うにはより良い(読む:より効率的な)方法が必要だと思います。助言がありますか?

更新:洞察に満ちた回答とコメントをありがとう! JavaScript 101を忘れていました。仕様では、連想配列の特定の順序は保証されていません。しかし興味深いのは、ほとんどのブラウザがそのように実装していることです。最初のキーを取得する前に配列を並べ替えない方がいいですが、私のユースケースを考えると避けられないかもしれません。

43
Andrew Hedges

連想配列(つまり、オブジェクト)には実際にはfirstまたはlast要素はありません。取得したい唯一の順序は、要素がパーサーによって保存された順序であり、それとの一貫性は保証されません。

しかし、もし最初に出てくるが欲しいなら、古典的な方法は実際には少し簡単かもしれません:

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

継承プロパティを避けたいですか?

function getKey(data) {
  for (var prop in data)
    if (data.propertyIsEnumerable(prop))
      return prop;
}
45

Object.keys()から返された最初のエントリを参照することで、関数を作成する必要を回避できます。

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

ソートされたキーリストの最初のエントリについては、.sort()メソッドへの呼び出しを追加するだけです。

_var firstKey = Object.keys(data).sort()[0];
_
58
Erik Anderson

Jonathanのソリューションに加えて、デフォルトの配列機能を拡張することもできます。

Array.prototype.getKey = function() {
  for (var prop in this)
    if (this.propertyIsEnumerable(prop))
      return prop;
}
2
dmnc