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


Respuestas:


67
var arr = new Array(5);
console.log(arr.length) // 5

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]


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.


@ 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("");

.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.


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('');

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)


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>

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.