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