Saya melihat beberapa solusi proyek kode .
Tetapi apakah ada implementasi reguler dalam JavaScript?
javascript
stringbuilder
leora
sumber
sumber
Jawaban:
Jika Anda harus menulis kode untuk Internet Explorer pastikan Anda memilih implementasi, yang menggunakan gabungan array. String penyambung dengan
+
atau+=
operator sangat lambat pada IE. Ini terutama berlaku untuk IE6. Pada browser modern+=
biasanya hanya secepat bergabung dengan array.Ketika saya harus melakukan banyak penggabungan string, saya biasanya mengisi array dan tidak menggunakan kelas pembuat string:
Perhatikan bahwa
push
metode menerima banyak argumen.sumber
[foo(), "bar", "baz"].join("");
berfungsi juga.push
bisa menerima banyak argumen. Hal-hal acak yang Anda pelajari.Saya baru saja memeriksa ulang kinerjanya di http://jsperf.com/javascript-concat-vs-join/2 . Kasing uji menggabungkan atau menggabungkan alfabet 1.000 kali.
Di peramban saat ini (FF, Opera, IE11, Chrome), "concat" sekitar 4-10 kali lebih cepat daripada "join".
Di IE8, keduanya mengembalikan hasil yang sama.
Di IE7, "bergabung" sekitar 100 kali lebih cepat sayangnya.
sumber
Tidak, tidak ada dukungan bawaan untuk membangun string. Anda harus menggunakan rangkaian sebagai gantinya.
Anda bisa, tentu saja, membuat array dari berbagai bagian string Anda dan kemudian memanggil
join()
array itu, tetapi kemudian tergantung pada bagaimana bergabung diimplementasikan dalam penerjemah JavaScript yang Anda gunakan.Saya membuat percobaan untuk membandingkan kecepatan
str1+str2
metode versusarray.push(str1, str2).join()
metode. Kode itu sederhana:Saya mengujinya di Internet Explorer 8 dan Firefox 3.5.5, keduanya pada Windows 7 x64.
Pada awalnya saya menguji sejumlah kecil iterasi (beberapa ratus, beberapa ribu item). Hasilnya tidak dapat diprediksi (terkadang penggabungan string membutuhkan 0 milidetik, terkadang butuh 16 milidetik, sama untuk penggabungan array).
Ketika saya meningkatkan jumlah menjadi 50.000, hasilnya berbeda di browser yang berbeda - di Internet Explorer, penggabungan string lebih cepat (94 milidetik) dan join lebih lambat (125 milidetik), sementara di Firefox join join lebih cepat (113 milidetik) daripada penggabungan string (117 milidetik).
Kemudian saya menambah jumlah menjadi 500'000. Sekarang
array.join()
adalah lebih lambat dari string Rangkaian di kedua browser: string concatenation adalah 937 ms di Internet Explorer, 1155 ms di Firefox, array yang bergabung 1265 di Internet Explorer, dan 1207 ms di Firefox.Jumlah iterasi maksimum yang bisa saya uji di Internet Explorer tanpa "script terlalu lama untuk dieksekusi" adalah 850.000. Kemudian Internet Explorer adalah 1593 untuk penggabungan string dan 2046 untuk penggabungan array, dan Firefox memiliki 2101 untuk penggabungan string dan 2249 untuk penggabungan array.
Hasil - jika jumlah iterasi kecil, Anda dapat mencoba menggunakannya
array.join()
, karena mungkin lebih cepat di Firefox. Ketika jumlahnya meningkat,string1+string2
metode ini lebih cepat.MEMPERBARUI
Saya melakukan tes di Internet Explorer 6 (Windows XP). Proses berhenti merespons segera dan tidak pernah berakhir, jika saya mencoba tes pada lebih dari 100.000 iterasi. Pada 40.000 iterasi hasilnya
Ini berarti - jika Anda perlu mendukung Internet Explorer 6, pilih
array.join()
cara mana yang lebih cepat daripada penggabungan string.sumber
join()
adalah bagian dari ECMAScript dan afaik setiap penerjemah JavaScript yang mengimplementasikannya. Mengapa itu "tergantung"?Kode itu terlihat seperti rute yang ingin Anda ambil dengan beberapa perubahan.
Anda ingin mengubah metode penambahan agar terlihat seperti ini. Saya telah mengubahnya untuk menerima angka 0, dan membuatnya kembali
this
sehingga Anda dapat menambahkan rantai Anda.sumber
null
,false
, string kosong,undefined
atauNaN
.Versi ECMAScript 6 (alias ECMAScript 2015) JavaScript memperkenalkan string literal .
Perhatikan bahwa tanda centang-kembali, bukan tanda kutip tunggal, melampirkan string.
sumber
Di C # Anda dapat melakukan sesuatu seperti
Di JavaScript Anda bisa melakukan sesuatu seperti
sumber
{0}
diganti berisi{1}
.Bagi yang tertarik, berikut ini alternatif untuk memohon Array.join:
Output, seperti yang diharapkan, adalah string 'foobar'. Di Firefox, pendekatan ini mengungguli Array.join tetapi dikalahkan oleh + concatenation. Karena String.concat mengharuskan setiap segmen untuk ditetapkan sebagai argumen terpisah, pemanggil dibatasi oleh batas jumlah argumen yang diberlakukan oleh mesin JavaScript yang menjalankan. Lihatlah dokumentasi Function.prototype.apply () untuk informasi lebih lanjut.
sumber
Saya telah mendefinisikan fungsi ini:
Dan bisa disebut seperti c #:
Hasil:
sumber
Ketika saya menemukan diri saya melakukan banyak penggabungan string dalam JavaScript, saya mulai mencari templating. Handlebars.js berfungsi cukup baik agar HTML dan JavaScript lebih mudah dibaca. http://handlebarsjs.com
sumber
Bagaimana kalau
sys.StringBuilder()
mencoba artikel berikut.https://msdn.microsoft.com/en-us/library/bb310852.aspx
sumber