Dalam Python, di mana [2]
ada daftar, kode berikut memberikan hasil ini:
[2] * 5 # Outputs: [2,2,2,2,2]
Apakah ada cara mudah untuk melakukan ini dengan array di JavaScript?
Saya menulis fungsi berikut untuk melakukannya, tetapi apakah ada sesuatu yang lebih pendek atau lebih baik?
var repeatelem = function(elem, n){
// returns an array with element elem repeated n times.
var arr = [];
for (var i = 0; i <= n; i++) {
arr = arr.concat(elem);
};
return arr;
};
javascript
arrays
repeat
Curious2learn
sumber
sumber
Jawaban:
Anda dapat melakukannya seperti ini:
Ini menggandakan array di setiap iterasi, sehingga dapat membuat array yang sangat besar dengan beberapa iterasi.
Catatan: Anda juga dapat banyak meningkatkan fungsi dengan menggunakan
push
alih-alihconcat
, karenaconcat
akan membuat array baru setiap iterasi. Seperti ini (ditunjukkan hanya sebagai contoh bagaimana Anda dapat bekerja dengan array):sumber
arr = new Array(len);
, lalu tetapkan kepada mereka dengan indeks dalam loop, yaituarr[i] = value;
. Dengan begitu Anda hanya membayar O (n) daripada harus terus merealokasi array saat itu tumbuh. Secara umum, selalu lebih baik untuk menghindari menumbuhkan array dengan menambahkan bila memungkinkan. Jika Anda tahu ukuran akhir, gunakan itu.Array.from({length:5}).map(x => 2)
Dalam ES6 menggunakan Array fill () metode
sumber
Array(5).fill([1,2,3]).flat()
. Perhatikan bahwa flat () masih sangat eksperimental dan dukungan browser buruk.fill
dievaluasi sekali, jadiArray(9).fill(someMutable)
buat sembilan referensi kesomeMutable
dalam array (mutasi satu mutasi 'semuanya').sumber
Array(...Array(10)).map(() => 5)
dengan operator penyebaran atau juga keArray.from(Array(10)).map(() => 5)
Array.from({length: 10}, () => 5);
lenght = 10
tanpa properti enumerable..map
hanya bekerja pada properti enumerable. The.apply
metode mengambil array ini, dan peta menjadi sebuaharguments array
(sebuah objek array-seperti) yang akan diteruskan keArray
fungsi konstruktor. Array argumen tidak dapat jarang sehingga properti yang hilang diatur keundefined
dan menjadi enumerable. Sekarang kita dapat menggunakan.map
seperti yang dimaksudkanAnda dapat mencoba:
Pembaruan (01/06/2018) :
Sekarang Anda dapat memiliki satu set karakter yang berulang.
Catatan: Periksa lebih lanjut tentang isian (...) dan dari (...) untuk kompatibilitas dan dukungan browser.
Pembaruan (05/11/2019) :
Cara lain, tanpa menggunakan
fill
ataufrom
, yang berfungsi untuk string dengan panjang berapa pun:sumber
Array.from({length:5}, i => 1) // [1, 1, 1, 1, 1]
atau buat array dengan nilai yang meningkat
Array.from({length:5}, (e, i)=>i) // [0, 1, 2, 3, 4]
sumber
Array.from({length:5}, i => 1)
=>i
adalahundefined
karena itu merupakan nilai kosongArray.from({length:5}, (e, i)=>i)
=>e
adalahundefined
karena itu mewakili nilai kosong. SeharusnyaArray.from({length:5}, v => 1)
danArray.from({length:5}, (v, i)=>i)
Di lodash tidak begitu buruk:
EDIT : Lebih baik lagi:
EDIT : Lebih baik lagi:
sumber
[c] * n
dapat ditulis sebagai:sehingga untuk
[2] * 5
sumber
Anda juga dapat memperluas fungsionalitas Array seperti:
Saya harus mencatat bahwa memperluas fungsionalitas objek bawaan dapat menyebabkan masalah jika Anda bekerja dengan perpustakaan pihak ketiga. Selalu timbang ke dalam keputusan Anda.
sumber
fill
setiap indeks dalam array akan merujuk ke objek yang sama, jadi mengubah satu akan mengubah semuanya. Ini tidak terlalu sulit untuk dipecahkan jika itu menjadi masalah.if (!Array.prototype.fill) { }
Dalam REPL Node.js:
sumber
Array.from({length: 5}, x => 2);
ref. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Using_arrow_functions_and_Array.fromJika Anda perlu mengulangi array beberapa kali:
terinspirasi oleh jawaban ini
sumber
Tidak ada cara yang lebih mudah. Anda perlu membuat lingkaran dan mendorong elemen ke dalam array.
sumber
push
lebih baik atauconcat
lebih baik, dalam hal efisiensi?Gunakan fungsi ini:
Atau untuk versi yang lebih ringkas:
Atau untuk versi kari:
Anda dapat menggunakan fungsi ini dengan daftar:
sumber
Jika Anda perlu mengulang array, gunakan yang berikut ini.
akan kembali
sumber
Satu kalimat lagi:
sumber
Fungsi ini menciptakan array elemen (panjang) di mana setiap elemen sama dengan (nilai) selama (nilai) adalah bilangan bulat atau string bilangan bulat. Angka desimal apa pun akan terpotong. Jika Anda ingin angka desimal, ganti "parseInt ( " dengan " parseFloat ( "
Contoh:
sumber
Saya punya masalah dengan metode yang disebutkan ketika saya menggunakan array seperti
Untuk mendapatkan ini saya menggunakan:
sumber
cycle
.Saya menemukan ini hari ini ketika mencoba membuat array 2D tanpa menggunakan loop. Dalam retrospeksi, bergabung dengan array baru rapi; Saya mencoba memetakan array baru, yang tidak berfungsi karena peta melompati slot kosong.
Karakter "#" dapat berupa karakter tunggal apa pun yang valid. Angka 5 akan menjadi variabel untuk jumlah elemen yang Anda inginkan. 7 akan menjadi nilai yang Anda ingin isi dengan array Anda.
Metode pengisian baru lebih baik, dan ketika saya mengkodekan ini saya tidak tahu itu ada, saya juga tidak tahu bahwa pengulangan adalah es6; Saya akan menulis posting blog tentang menggunakan trik ini bersama-sama dengan mengurangi untuk melakukan hal-hal keren.
http://jburger.us.to/2016/07/14/functionally-create-a-2d-array/
sumber
Coba ini:
sumber
sumber
Jika Anda menggunakan sabuk utlity seperti lodash / garis bawah Anda dapat melakukannya seperti ini :)
sumber
Dapat digunakan sebagai one-liner juga:
sumber
Meningkatkan pada jawaban Vivek , ini berfungsi untuk string dengan panjang berapa pun, untuk mengisi array dengan panjang n:
Array(n+1).join('[string to be repeated][separator]').split('[separator]').slice(0, n)
sumber
Saya membutuhkan cara untuk mengulang / mengulangi array (dengan n item) m kali.
Misalnya, mendistribusikan daftar (orang) ke satu minggu / bulan. Katakanlah saya punya 3 nama, dan saya ingin mereka mengulanginya dalam seminggu:
sumber