¿Cómo inicializar la longitud de una matriz en JavaScript?
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;
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 alertasES6
nos daArray.from
para 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]
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 0
y .fill()
ejecutarlo sin argumentos, lo que llenará la matriz con undefined
. ( Sin embargo, esto fallará en Typecript )