Каков наиболее эффективный способ получить первый элемент из ассоциативного массива в JavaScript?
Мне нужно получить только первый элемент (фактически, только первый ключ) от довольно большого ассоциативного массива в JavaScript. Вот как я это делаю сейчас (используя jQuery):
getKey = function (data) {
var firstKey;
$.each(data, function (key, val) {
firstKey = key;
return false;
});
return firstKey;
};
Просто догадываюсь, но я бы сказал, что это будет лучше (читай: более эффективный) способ сделать это. Любые предложения?
ОБНОВЛЕНИЕ: Спасибо за проницательные ответы и комментарии! Я забыл свой JavaScript 101, в котором спецификация говорит, что вам не гарантирован определенный порядок в ассоциативном массиве. Интересно, однако, что большинство браузеров действительно реализуют его именно так. Я бы предпочел не сортировать массив перед тем, как получить этот первый ключ, но это может быть неизбежным с учетом моего использования.
Ответы
Ответ 1
В ассоциативных массивах (т.е. объекты) не существует элемента 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;
}
Ответ 2
Вы можете избежать необходимости создавать функцию, ссылаясь на первую запись, возвращаемую с Object.keys()
:
var firstKey = Object.keys(data)[0];
Для первой записи из списка отсортированных ключей просто добавьте вызов методу .sort()
:
var firstKey = Object.keys(data).sort()[0];
Ответ 3
В дополнение к решению Джонатана мы также можем расширить функциональность массива по умолчанию:
Array.prototype.getKey = function() {
for (var prop in this)
if (this.propertyIsEnumerable(prop))
return prop;
}