javascript membuat larik kosong dengan ukuran tertentu

94

di javascript bagaimana saya membuat array kosong dengan ukuran tertentu

Kode Psuedo:

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

keluaran:

   myarray = ["","",""]
gus
sumber
2
Anda mungkin akan menggunakan Array.prototype.fill .
RobG
Kemungkinan duplikat dari nilai larik default
Nick Grealy
Posting terkait di sini .
RBT

Jawaban:

67
var arr = new Array(5);
console.log(arr.length) // 5
mariocatch
sumber
14
OP bertanya in javascript how would I create an empty array of a given size. Ini memecahkan masalah itu.
mariocatch
12
OP telah memberikan contoh "kosong".
RobG
6
Nah ini adalah opsi lain untuk pertanyaan itu. Mereka dapat memilih salah satu jawaban yang diberikan, itulah
keunggulan
235

1) Untuk membuat array baru yang tidak dapat Anda lakukan iterasi , Anda dapat menggunakan konstruktor array:

Array(100) atau new Array(100)


2) Anda dapat membuat array baru, yang dapat diulang seperti di bawah ini:

a) Semua versi JavaScript

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

b) Dari versi JavaScript ES6

  • Operator perusak: [...Array(100)]
  • Array.prototype.fill Array(100).fill(undefined)
  • Array.from Array.from({ length: 100 })

Anda dapat memetakan array ini seperti di bawah ini.

  • 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
sumber
1
Array.prototype.fill (> = ES6) kangax.github.io/compat-table/es6/… ;
ptim
4
Enlightenment of the day - ketika Anda menyebutkan di bagian (A) bahwa array yang baru dibuat menggunakan sintaks konstruktor bahkan tidak dapat diulang. Javascript terkadang benar-benar mengejutkan.
NSP
Berapa ukuran Array(10000)dengan empty x 10000?
Qwerty
1
Panjangnya 10000, Anda dapat memeriksanya dengan console.log(Array(10000).length)Tetapi jika Anda menjalankan Array(10000).forEach((u, i) => console.log(i)), Anda tidak akan mendapatkan output
stpoa
Array.apply('x', Array(10))sebenarnya[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
Polv
44

Kami gunakan Array.from({length: 500})sejak 2017.

andrewkslv
sumber
@ gion_13: Saya melihatnya dipilih dan milik saya ditolak. Alasan?
7vujy0f0hy
@ 7vujy0f0hy Saya tidak tahu mengapa Anda menurunkan suara. Saya memberi Anda suara positif, meskipun solusi Anda sedikit kurang intuitif daripada yang ini.
gion_13
@ gion_13: Terima kasih telah mengonfirmasi bahwa tidak ada yang salah dengan solusi saya ☺.
7vujy0f0hy
17

Coba gunakan whileloop,Array.prototype.push()

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

Atau, gunakan Array.prototype.fill()

var myArray = Array(3).fill("");
tamu271314
sumber
.fill()adalah solusi satu kapal yang elegan. Terima kasih!
colefner
15

Pada 2018 dan selanjutnya kita akan gunakan [...Array(500)]untuk itu.

7vujy0f0hy
sumber
1
Menuju masa depan!
Levi
Menariknya, ini (dan yang serupa) 50% lebih lambat dari sebelumnya (() => { let n = []; for(var i=0;i<500;i++){y.push("");} return n; })().
Alex
Itu berbau pengoptimalan prematur, mungkin jika Anda berniat untuk membuat sekumpulan array dengan puluhan juta elemen, Anda mungkin ingin mempertimbangkannya tetapi beberapa nanodetik, untuk kebanyakan kasus, tidak akan membuatnya sepadan dengan keterbacaan. .
JaredMcAteer
10

Pada ES5 (saat jawaban ini diberikan):

Jika Anda ingin undefinedelemen array kosong , Anda dapat melakukannya

var whatever = new Array(5);

ini akan memberimu

[undefined, undefined, undefined, undefined, undefined]

dan kemudian jika Anda ingin diisi dengan string kosong, Anda dapat melakukannya

whatever.fill('');

yang akan memberimu

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

Dan jika Anda ingin melakukannya dalam satu baris:

var whatever = Array(5).fill('');
jeffdill2.dll
sumber
2
Array baru (2) tidak memberi Anda [undefined, undefined]. Ini memberi Anda array yang tidak dapat diulang.
JCF
BAIK. Ada hal lain yang terjadi, saya tidak mengerti. Saya membuat array baru dengan new Array(2)dan apa yang saya dapatkan [ <2 empty items> ]tidak [undefined, undefined]. Menggunakan .mapyang pertama tidak berpengaruh. Namun, saya dapat mengulanginya menggunakan for...ofloop. Jika saya membuat array baru menggunakan notasi literal a = [undefined, undefined]maka saya dapat menggunakannya .map.
JCF
1
@JCF untuk ... menggunakan protokol iterator, jadi berperilaku berbeda dari forEach / map. Iterator kehilangan informasi kekosongan
Tomasz Błachut
@ TomaszBłachut @JCF Untuk para pemilih yang tidak memberikan suara, harap diingat bahwa jawaban ini diberikan lebih dari 4 tahun yang lalu - saat itu, jawaban ini 100% valid. ES6 dan ES7 tidak mulai diluncurkan ke browser masing-masing hingga pertengahan 2016 dan pertengahan 2018. Pada saat jawaban ini diberikan, versi JS adalah ES5. Jika Anda membutuhkan bukti lebih lanjut bahwa ini adalah cara kerja ES5, cukup putar contoh Chrome yang lebih lama - pada saat jawaban ini, itu akan menjadi v48 - dan jalankan Array(5). Anda akan melihat output sebagai berikut: [undefined x 5].
jeffdill2
@ jeffdill2 Yang terbaik adalah menambahkan informasi baru ke jawaban itu sendiri. Komentar tidak selalu dibaca sepenuhnya.
Boaz
4

Jika Anda ingin membuat array anonim dengan beberapa nilai sehingga Anda dapat menggunakan sintaks ini.

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

manan5439
sumber
0

Anda dapat menggunakan kedua metode javascript repeat () dan split () bersama-sama.

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

Kode ini akan membuat array yang memiliki 10 item dan setiap item berupa string kosong.

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

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

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

</pre>

Serhan C.
sumber