javascript crea una matriz vacía de un tamaño dado

Respuestas:

67
var arr = new Array(5);
console.log(arr.length) // 5
mariocatch
fuente
14
Preguntó el OP in javascript how would I create an empty array of a given size. Esto resuelve ese problema.
mariocatch
12
El OP ha proporcionado un ejemplo de "vacío".
RobG
6
Bueno, esta es otra opción a la pregunta. Pueden elegir cualquiera de las respuestas proporcionadas, esa es la gloria de stackoverflow :)
mariocatch
235

1) Para crear una nueva matriz sobre la que no puede iterar , puede usar el constructor de matriz:

Array(100) o new Array(100)


2) Puede crear una nueva matriz, que se puede iterar como se muestra a continuación:

a) Todas las versiones de JavaScript

  • Array.apply: Array.apply(null, Array(100))

b) Desde la versión de JavaScript ES6

  • Operador de desestructuración: [...Array(100)]
  • Array.prototype.fill Array(100).fill(undefined)
  • Matriz. De Array.from({ length: 100 })

Puede mapear estas matrices como se muestra a continuación.

  • Array(4).fill(null).map((u, i) => i) [0, 1, 2, 3]

  • [...Array(4)].map((u, i) => i) [0, 1, 2, 3]

  • Array.apply(null, Array(4)).map((u, i) => i) [0, 1, 2, 3]

  • Array.from({ length: 4 }).map((u, i) => i) [0, 1, 2, 3]

stpoa
fuente
1
Array.prototype.fill (> = ES6) kangax.github.io/compat-table/es6/… ;
ptim
4
La iluminación del día: cuando menciona en la parte (A) que una matriz recién creada que utiliza la sintaxis del constructor ni siquiera es iterable. Javascript realmente sorprende a veces.
RBT
¿Cuál es el tamaño de Array(10000)con empty x 10000?
Qwerty
1
Su longitud es 10000, puede verificarla por console.log(Array(10000).length)Pero si ejecuta Array(10000).forEach((u, i) => console.log(i)), no obtendrá salida
stpoa
Array.apply('x', Array(10))es en realidad[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
Polv
44

Usamos Array.from({length: 500})desde 2017.

andrewkslv
fuente
@ gion_13: Veo que se votó a favor y que el mío se votó en contra. ¿Razón?
7vujy0f0hy
@ 7vujy0f0hy No sé por qué obtuviste votos negativos. Le di un voto a favor, aunque su solución es un poco menos intuitiva que esta.
gion_13
@ gion_13: Gracias por confirmar que no hay nada de malo en mi solución ☺.
7vujy0f0hy
17

Intenta usar whileloop,Array.prototype.push()

var myArray = [], X = 3;
while (myArray.length < X) {
  myArray.push("")
}

Alternativamente, usando Array.prototype.fill()

var myArray = Array(3).fill("");
invitado271314
fuente
.fill()es una elegante solución de una sola línea. ¡Gracias!
colefner
15

En 2018 y de ahora en adelante usaremos [...Array(500)]para ese fin.

7vujy0f0hy
fuente
1
¡en el futuro!
Levi
Hilarantemente, esto (y similares) es un 50% más lento que solo (() => { let n = []; for(var i=0;i<500;i++){y.push("");} return n; })().
Alex
Eso huele a optimización prematura, tal vez si tiene la intención de crear un montón de matrices con decenas de millones de elementos, es posible que desee considerarlo, pero unos pocos nanosegundos, en la mayoría de los casos, no harán que valga la pena el golpe de legibilidad. .
JaredMcAteer
10

A partir de ES5 (cuando se dio esta respuesta):

Si desea una matriz vacía de undefinedelementos, simplemente puede hacer

var whatever = new Array(5);

esto te daría

[undefined, undefined, undefined, undefined, undefined]

y luego, si desea que se llene con cadenas vacías, puede hacer

whatever.fill('');

que te daría

["", "", "", "", ""]

Y si quieres hacerlo en una línea:

var whatever = Array(5).fill('');
jeffdill2
fuente
2
new Array (2) no le da [undefined, undefined]. Te da una matriz que no es iterable.
JCF
OKAY. Hay algo más que no entiendo. Estoy creando una nueva matriz con new Array(2)y lo que obtengo [ <2 empty items> ]no lo es [undefined, undefined]. Usar .mapen el primero no tiene ningún efecto. Sin embargo, puedo iterar sobre él usando un for...ofbucle. Si creo una nueva matriz usando notación literal a = [undefined, undefined], puedo usarla .map.
JCF
1
@JCF for ... of usa el protocolo iterador, por lo que se comporta de manera diferente a forEach / map. Los iteradores pierden información de vacío
Tomasz Błachut
@ TomaszBłachut @JCF Para los votantes en contra, tenga en cuenta que esta respuesta se dio hace más de 4 años, en cuyo momento, esta respuesta era 100% válida. ES6 y ES7 no comenzaron a implementarse en los navegadores hasta mediados de 2016 y mediados de 2018, respectivamente. En el momento de esta respuesta, la versión JS habría sido ES5. Si necesita más pruebas de que esto es la forma en que funcionó ES5, simplemente inicie una instancia anterior de Chrome (en el momento de esta respuesta, habría sido v48) y ejecute Array(5). Verá el siguiente resultado: [undefined x 5].
jeffdill2
@ jeffdill2 Es mejor agregar nueva información a la propia respuesta. Los comentarios no siempre se leen en su totalidad.
Boaz
4

Si desea crear una matriz anónima con algunos valores, puede usar esta sintaxis.

var arr = new Array(50).fill().map((d,i)=>++i)
console.log(arr)

manan5439
fuente
0

Puede usar ambos métodos de JavaScript, repeat () y split () juntos.

" ".repeat(10).split(" ")

Este código creará una matriz que tiene 10 elementos y cada elemento es una cadena vacía.

const items = " ".repeat(10).split(" ")

document.getElementById("context").innerHTML = items.map((item, index) => index)

console.log("items: ", items)
<pre id="context">

</pre>

Serhan C.
fuente