javascript cria um array vazio de um determinado tamanho


Respostas:


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

15
O OP perguntou in javascript how would I create an empty array of a given size. Isso resolve o problema.
mariocatch de

13
O OP forneceu um exemplo de "vazio".
RobG de

8
Bem, esta é outra opção para a pergunta. Eles podem escolher qualquer uma das respostas fornecidas, essa é a glória do stackoverflow :)
mariocatch de

250

1) Para criar uma nova matriz que não possa ser repetida , você pode usar o construtor de matriz:

Array(100) ou new Array(100)


2) Você pode criar uma nova matriz, que pode ser iterada como a seguir:

a) Todas as versões de JavaScript

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

b) Da versão ES6 JavaScript

  • Operador de reestruturação: [...Array(100)]
  • Array.prototype.fill Array(100).fill(undefined)
  • Array.from Array.from({ length: 100 })

Você pode mapear esses arrays como abaixo.

  • 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
Esclarecimento do dia - quando você menciona na parte (A) que um array recém-criado usando a sintaxe do construtor não é nem mesmo iterável. Javascript realmente surpreende às vezes.
RBT

Qual é o tamanho de Array(10000)com empty x 10000?
Qwerty

1
Seu comprimento é 10000, você pode verificar por console.log(Array(10000).length)Mas se você executar Array(10000).forEach((u, i) => console.log(i)), você não obterá saída
stpoa

Array.apply('x', Array(10))é na verdade[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
Polv

47

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


@ gion_13: Vejo que está sendo votado a favor e o meu sendo rejeitado. Razão?
7vujy0f0hy

1
@ 7vujy0f0hy Não sei por que você perdeu votos. Eu lhe dei um voto favorável, embora sua solução seja um pouco menos intuitiva do que esta.
gion_13

@ gion_13: Obrigado por confirmar que não há nada de errado com minha solução ☺.
7vujy0f0hy

18

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

1
.fill()é uma solução elegante de um revestimento. Obrigado!
colefner

17

Em 2018 e daí em diante usaremos [...Array(500)]para esse fim.


2
no futuro!
Levi

Hilariante, isso (e algo semelhante) é 50% mais lento do que apenas (() => { let n = []; for(var i=0;i<500;i++){y.push("");} return n; })().
Alex

Isso cheira a otimização prematura, talvez se você pretende criar um monte de matrizes com dezenas de milhões de elementos você pode querer considerar, mas alguns nanossegundos, na maioria dos casos, não vão valer a pena o sucesso de legibilidade .
JaredMcAteer de

11

No ES5 (quando esta resposta foi dada):

Se você quiser uma matriz vazia de undefinedelementos, pode simplesmente fazer

var whatever = new Array(5);

isso daria a você

[undefined, undefined, undefined, undefined, undefined]

e então se você quiser que ele seja preenchido com strings vazias, você pode fazer

whatever.fill('');

o que daria a você

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

E se você quiser fazer isso em uma linha:

var whatever = Array(5).fill('');

3
new Array (2) não fornece [undefined, undefined]. Ele fornece uma matriz que não é iterável.
JCF

ESTÁ BEM. Há algo mais acontecendo que não entendo. Estou criando uma nova matriz com new Array(2)e o que recebo [ <2 empty items> ]não é [undefined, undefined]. Usar .mapno primeiro não tem efeito. No entanto, posso iterar sobre ele usando um for...ofloop. Se eu criar uma nova matriz usando notação literal a = [undefined, undefined], posso usar .mapnela.
JCF

2
@JCF for ... of usa protocolo iterador, portanto, ele se comporta de maneira diferente de forEach / map. Iteradores perdem informações de vazio
Tomasz Błachut

2
@ TomaszBłachut @JCF Para os votantes abaixo, por favor, tenha em mente que esta resposta foi dada há mais de 4 anos - na época, esta resposta era 100% válida. ES6 e ES7 não começaram a ser implementados em navegadores até meados de 2016 e meados de 2018, respectivamente. No momento desta resposta, a versão JS seria ES5. Se você precisar de mais provas de que esta é a forma como o ES5 funcionava, simplesmente gire uma instância mais antiga do Chrome - no momento desta resposta, seria a v48 - e execute Array(5). Você verá o seguinte resultado: [undefined x 5].
jeffdill2

2
@ jeffdill2 É melhor adicionar novas informações à própria resposta. Os comentários nem sempre são lidos na íntegra.
Boaz

4

Se você deseja criar uma matriz anônima com alguns valores, pode usar esta sintaxe.

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


0

Você pode usar os métodos de javascript repeat () e split () juntos.

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

Este código criará uma matriz com 10 itens e cada item é uma string vazia.

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

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

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

</pre>

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.