javascript cria um array vazio de um determinado tamanho

99

em javascript como eu criaria um array vazio de um determinado tamanho

Código Psuedo:

X = 3;
createarray(myarray, X, "");

resultado:

   myarray = ["","",""]
gus
fonte
3
Você provavelmente usaria Array.prototype.fill .
RobG de
Possível duplicata de valores de matriz padrão
Nick Grealy
Postagem relacionada aqui .
RBT de

Respostas:

71
var arr = new Array(5);
console.log(arr.length) // 5
mariocatch
fonte
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]

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

andrewkslv
fonte
@ 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("");
guest271314
fonte
1
.fill()é uma solução elegante de um revestimento. Obrigado!
colefner
17

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

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

manan5439
fonte
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>

Serhan C.
fonte