¿Cómo inicializar la longitud de una matriz en JavaScript?

Resuelto Michael Martin-Smucker asked hace 13 años • 20 respuestas

La mayoría de los tutoriales que he leído sobre matrices en JavaScript (incluidos w3schools y devguru ) sugieren que puedes inicializar una matriz con una cierta longitud pasando un número entero al constructor de matrices usando la var test = new Array(4);sintaxis.

Después de usar esta sintaxis generosamente en mis archivos js, ejecuté uno de los archivos a través de jsLint y se asustó:

Error: Problema en la línea 1, carácter 22: Se esperaba ')' y en su lugar vio '4'.
prueba var = nueva matriz (4);
Problema en la línea 1, carácter 23: esperado ';' y en su lugar vio ')'.
prueba var = nueva matriz (4);
Problema en la línea 1, carácter 23: se esperaba un identificador y en su lugar vio ')'.

Después de leer la explicación de jsLint sobre su comportamiento , parece que a jsLint realmente no le gusta la new Array()sintaxis y, en cambio, prefiere []declarar matrices.

Entonces tengo un par de preguntas:

Primero, ¿por qué? ¿Corro algún riesgo al utilizar la new Array()sintaxis? ¿Existen incompatibilidades de navegador que debo tener en cuenta?

Y segundo, si cambio a la sintaxis de corchetes, ¿hay alguna manera de declarar una matriz y establecer su longitud en una sola línea, o tengo que hacer algo como esto?

var test = [];
test.length = 4;
Michael Martin-Smucker avatar Jan 31 '11 21:01 Michael Martin-Smucker
Aceptado
  • Array(5)le proporciona una matriz con longitud 5 pero sin valores, por lo tanto, no puede iterar sobre ella.

  • Array.apply(null, Array(5)).map(function () {})le proporciona una matriz con longitud 5 y valores indefinidos, ahora se puede iterar.

  • Array.apply(null, Array(5)).map(function (x, i) { return i; })le proporciona una matriz con longitud 5 y valores 0,1,2,3,4.

  • Array(5).forEach(alert)no hace nada, Array.apply(null, Array(5)).forEach(alert)te da 5 alertas

  • ES6nos da Array.frompara que ahora también puedas usarArray.from(Array(5)).forEach(alert)

  • Si desea inicializar con un valor determinado, es bueno saberlo...
    Array.from('abcde'), Array.from('x'.repeat(5))
    oArray.from({length: 5}, (v, i) => i) // gives [0, 1, 2, 3, 4]

Ruben Stolk avatar Feb 19 '2015 05:02 Ruben Stolk

Con ES2015.fill() ahora puedes simplemente hacer:

// `n` is the size you want to initialize your array
// `0` is what the array will be filled with (can be any other value)
Array(n).fill(0)

Lo cual es mucho más conciso queArray.apply(0, new Array(n)).map(i => value)

Es posible colocarlo 0y .fill()ejecutarlo sin argumentos, lo que llenará la matriz con undefined. ( Sin embargo, esto fallará en Typecript )

AP. avatar Mar 01 '2017 18:03 AP.