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 に答える