Espero que mi pregunta no sea tan tonta. Pero me he preguntado cómo funcionan las matrices en JavaScript. Espacialmente obteniendo un elemento por índice.

Supongamos que tengo una matriz llamada myFirstArray con los elementos [1,2,3,4]. Cuando escribo myFirstArray [3], ¿cómo funciona obtener el cuarto elemento de esa matriz? ¿Se repite? Entonces, ¿cada vez que quiero el último elemento de una matriz se repite en toda la matriz?

Lo mismo ocurre con la adición de un elemento a una matriz. ¿El bucle siempre a través de la matriz encuentra el último elemento en la matriz?

Lo pregunto porque implementé una lista enlazada en Javascript y me pregunto si es más eficiente que una matriz normal.

0
bonbon 5 sep. 2014 a las 11:53

3 respuestas

La mejor respuesta

La implementación de matrices en Javascript es un poco diferente de cómo se hace en la mayoría de los otros idiomas.

Una matriz no es solo una lista de elementos, sino que es una matriz asociativa. Los elementos no se almacenan uno detrás del otro, sino que se almacenan como pares discretos de clave-valor. Si, por ejemplo, coloca valores en los índices 3 y 5, la matriz no contiene elementos indefinidos para llenar los vacíos, solo tiene los valores establecidos.

Con un código como este:

var a = [];
a[3] = 1;
a[5] = 2;

Los datos que se almacenan en la matriz no se ven así:

[ undefined, undefined, undefined, 1, undefined, 2 ]

Más bien se ve así:

{
  "3": 1,
  "5": 2,
  "length": 6
}

Los elementos en la matriz se almacenan como propiedades en el objeto de la matriz, es solo que la matriz maneja las propiedades con una clave numérica de una manera especial, es decir, ajustando la propiedad length si es necesario.

La implementación de la colección de valores clave se realiza utilizando una tabla hash (o quizás algo aún más eficiente, dependiendo del motor Javascript), por lo que acceder a un elemento está cerca de una operación O (1), es decir, no se repite todas las propiedades hasta que encuentre la correcta.

3
Guffa 5 sep. 2014 a las 10:21

En Javascript hay objetos integrados estándar y uno de esos objetos es Array . La matriz es un objeto global de alto nivel y se utiliza como constructor de matrices.

Los elementos de matriz son propiedades de objeto a las que se puede acceder mediante la notación de corchetes. En otros idiomas, llamaría a las matrices Javascript como matrices dispersas (por ejemplo, Wolfram).

1
Margus 5 sep. 2014 a las 08:41

La forma en que se realiza el acceso a la matriz depende del motor de JavaScript y, por lo tanto, puede diferir de un motor a otro.

Sin embargo, supongo que las matrices siguen siendo bloques de memoria en la mayoría de los motores. Si accede a un elemento, la matriz no tiene un círculo. En su lugar, se calcula la dirección de memoria para ese elemento específico (memory_offset_of_the_first_element + size_of_element * desired_index) y luego el elemento se puede recopilar desde allí. Las inserciones y eliminaciones son más complejas y caras. En el peor de los casos, toda la matriz debe copiarse y ajustarse.

Lamar proporcionó una buena descripción general en ¿Cuándo usar una lista vinculada sobre una matriz / lista de matrices?.

1
Community 23 may. 2017 a las 10:27