javascript belirli bir boyutta boş bir dizi oluşturur


Yanıtlar:


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

14
OP sordu in javascript how would I create an empty array of a given size. Bu, bu sorunu çözer.
mariocatch

12
OP bir "boş" örneği sağlamıştır.
RobG

6
Bu soru için başka bir seçenektir. Verilen cevaplardan herhangi birini seçebilirler, bu stackoverflow'un ihtişamı :)
mariocatch

235

1) Üzerinde yineleme yapamayacağınız yeni bir dizi oluşturmak için dizi yapıcısını kullanabilirsiniz:

Array(100) veya new Array(100)


2) Aşağıdaki gibi yinelenebilen yeni dizi oluşturabilirsiniz :

a) Tüm JavaScript sürümleri

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

b) ES6 JavaScript sürümünden

  • Yıkıcı operatör: [...Array(100)]
  • Array.prototype.fill Array(100).fill(undefined)
  • Array.from Array.from({ length: 100 })

Bu dizileri aşağıdaki gibi haritalayabilirsiniz.

  • 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
Günün Aydınlanması - Kısım (A) 'da yapıcı sözdizimi kullanılarak yeni oluşturulmuş bir dizinin yinelenebilir olmadığını belirttiğinizde. Javascript bazen gerçekten şaşırtıyor.
RBT

Büyüklüğü nedir Array(10000)ile empty x 10000?
Qwerty

1
Uzunluğu 10000, kadar kontrol edebilirsiniz console.log(Array(10000).length)Ama Array(10000).forEach((u, i) => console.log(i))
koşarsanız

Array.apply('x', Array(10))aslında[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
Polv

44

Array.from({length: 500})2017'den beri kullanıyoruz .


@ gion_13: Oylandığını ve benimkinin reddedildiğini görüyorum . Nedeni?
7vujy0f0hy

@ 7vujy0f0hy Neden aşağı oy aldığınızı bilmiyorum. Çözümünüz bundan biraz daha az sezgisel olsa da size bir oy verdim.
gion_13

@ gion_13: Çözümümde yanlış bir şey olmadığını onayladığınız için teşekkürler ☺.
7vujy0f0hy

17

whileDöngü kullanmayı deneyin ,Array.prototype.push()

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

Alternatif olarak, kullanarak Array.prototype.fill()

var myArray = Array(3).fill("");

.fill()zarif tek astarlı bir çözümdür. Teşekkürler!
colefner

15

2018'de ve bundan sonra [...Array(500)]bu amaçla kullanacağız .


1
geleceğe doğru!
Levi

Komik bir şekilde bu (ve benzeri) sadece% 50 daha yavaştır (() => { let n = []; for(var i=0;i<500;i++){y.push("");} return n; })().
Alex

Bu, erken optimizasyon kokuyor, belki on milyonlarca öğeden oluşan bir dizi dizi oluşturmayı düşünüyorsanız, bunu düşünmek isteyebilirsiniz, ancak çoğu durumda birkaç nanosaniye, okunabilirlik isabetine değmeyecektir. .
JaredMcAteer

10

ES5 itibariyle (bu cevap verildiğinde):

Boş bir undefinedöğe dizisi istiyorsanız , şunları yapabilirsiniz:

var whatever = new Array(5);

bu sana verecek

[undefined, undefined, undefined, undefined, undefined]

ve sonra boş dizelerle doldurulmasını istiyorsanız,

whatever.fill('');

hangisi sana verecek

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

Ve bunu tek satırda yapmak istiyorsanız:

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

2
new Array (2) size [undefined, undefined] vermez. Size yinelenemeyen bir dizi verir.
JCF

TAMAM. Anlamadığım bir şey daha var. İle yeni bir dizi oluşturuyorum new Array(2)ve geri aldığım şey [ <2 empty items> ]değil [undefined, undefined]. İlki .mapüzerinde kullanmanın hiçbir etkisi yoktur. Ancak, bir for...ofdöngü kullanarak üzerinde yineleme yapabilirim . Birebir gösterimi kullanarak yeni bir dizi yaratırsam , onu a = [undefined, undefined]kullanabilirim .map.
JCF

1
@JCF for ... of iterator protokolünü kullanır, bu nedenle forEach / map'den farklı davranır. Yineleyiciler boşluk bilgisini
kaybediyor

@ TomaszBłachut @JCF Olumsuz oy verenler için, lütfen bu cevabın 4 yıldan uzun bir süre önce verildiğini unutmayın - o zaman bu cevap% 100 geçerliydi. ES6 ve ES7, sırasıyla 2016 ortasına ve 2018 ortasına kadar tarayıcılarda kullanıma sunulmadı. Bu cevabın verildiği sırada JS versiyonu ES5 olacaktır. Eğer bu, daha fazla kanıt gerekiyorsa olduğunu ES5, basitçe Chrome'un eski örneğini yukarı dönmeye çalıştı yolu - ve çalıştırma - Bu cevabın zamanda, V48 olurdu Array(5). Aşağıdaki çıktıyı göreceksiniz: [undefined x 5].
jeffdill2

@ jeffdill2 Cevabın kendisine yeni bilgiler eklemek en iyisidir. Yorumlar her zaman tam olarak okunmaz.
Boaz

4

Bazı değerlerle anonim dizi oluşturmak istiyorsanız bu sözdizimini kullanabilirsiniz.

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


0

Hem javascript yöntemlerini tekrar () hem de split () birlikte kullanabilirsiniz.

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

Bu kod, 10 öğeli ve her öğesi boş dizeden oluşan bir dizi oluşturacaktır.

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

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

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

</pre>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.