objetos especifico eliminar elementos elemento ejemplos contar asociativo array agregar javascript jquery arrays associative

especifico - ¿Cuál es la forma más eficiente de obtener el primer elemento de una matriz asociativa en JavaScript?



contar elementos de un array javascript (3)

No hay realmente un primer elemento o último elemento en matrices asociativas (es decir, objetos). El único orden que puede esperar adquirir es el orden en que el analizador guardó los elementos, y no hay garantías de coherencia con eso.

Pero, si quiere que aparezca el primero , la manera clásica podría ser un poco más fácil:

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

¿Quieres evitar las propiedades de herencia?

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

Necesito obtener solo el primer elemento (en realidad, solo la primera clave) de una matriz asociativa bastante grande en JavaScript. Así es como lo estoy haciendo actualmente (usando jQuery):

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

Solo estoy adivinando, pero diría que tiene que haber una forma mejor (leer: más eficiente) de hacer esto. ¿Alguna sugerencia?

ACTUALIZACIÓN: ¡Gracias por las perspicaces respuestas y comentarios! Había olvidado mi JavaScript 101, en donde la especificación dice que no tienes garantizado un orden en particular en una matriz asociativa. Sin embargo, es interesante que la mayoría de los navegadores lo implementen de esa manera. Prefiero no ordenar la matriz antes de obtener esa primera clave, pero puede ser inevitable dado mi caso de uso.


Además de la solución de Jonathan, también podemos extender la funcionalidad de matriz predeterminada:

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


Puede evitar tener que crear una función haciendo referencia a la primera entrada devuelta desde Object.keys() :

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

Para la primera entrada de una lista de claves ordenadas, simplemente agregue una llamada al método .sort() :

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