Bagaimana untuk membina/menggabungkan rentetan dalam JavaScript?
P粉513316221
2023-08-27 19:01:23
<p>Adakah JavaScript menyokong penggantian/interpolasi? </p>
<h3>Ikhtisar</h3>
<hr />
<p>Saya sedang mengusahakan projek JavaScript dan apabila ia semakin besar, ia semakin sukar untuk mengekalkan rentetan dalam keadaan yang baik. Saya ingin tahu apakah cara yang paling mudah dan paling tradisional untuk membina atau membina rentetan dalam JavaScript. </p>
<p>Pengalaman saya setakat ini:</p>
<blockquote>
<p>Apabila projek menjadi lebih kompleks, gabungan rentetan mula kelihatan hodoh dan menjadi lebih sukar untuk dikekalkan. </p>
</blockquote>
<p>Perkara yang paling penting pada ketika ini ialah kesederhanaan dan kebolehbacaan, fikirkan tentang sekumpulan bahagian yang bergerak, bukan hanya 2-3 pembolehubah. </p>
<p>Sama pentingnya, ia kini disokong oleh penyemak imbas utama (iaitu sekurang-kurangnya ES5). </p>
<p>Saya tahu singkatan sambungan JavaScript: </p>
<pre class="brush:php;toolbar:false;">var x = 'Hello';
var y = 'dunia';
console.log(x + ', ' + y);</pre>
<p>Terdapat juga fungsi String.concat. </p>
<p>Saya sedang mencari sesuatu yang lebih bersih. </p>
<p>Ruby dan Swift melakukan ini dengan cara yang menarik. </p>
<p><strong>Ruby</strong></p>
<pre class="brush:php;toolbar:false;">var x = 'Hello'
var y = 'dunia'
cetak "#{x}, #{y}"</pre>
<p><strong>Swift</strong></p>
<pre class="brush:php;toolbar:false;">var x = "Hello"
var y = "dunia"
println("(x), (y)")</pra>
<p>Saya fikir mungkin ada sesuatu yang serupa dalam JavaScript, mungkin sesuatu seperti sprintf.js. </p>
<h3>Soalan</h3>
<hr />
<p>Bolehkah ini dilakukan tanpa perpustakaan pihak ketiga? Jika tidak, apa yang boleh saya gunakan? </p>
Saya kecewa kerana tiada siapa dalam jawapan yang lain menjelaskan "cara terbaik" bermaksud "cara terpantas"...
Saya menarik dua contoh daripada di sini dan menambah
str。 join()
和str.reduce()
daripada jawapan nishanths di atas. Berikut ialah keputusan saya pada Firefox 77.0.1 di Linux.Nota: Saya dapati semasa menguji ini bahawa jika saya meletakkan
str = str.concat()
和str +=
secara langsung sebelum atau selepas satu sama lain, yang kedua sentiasa menunjukkan prestasi yang lebih baik...jadi saya menjalankan ujian ini secara individu dan mengulas tentang Keputusan yang lain...Walaupun begitu , jika saya menjalankannya semula, kelajuannya berubah banyak , jadi saya mengukur setiap satu 3 kali.
1 aksara pada satu masa:
str = str.concat()
:841、439、956 毫秒 / 1e7 concat() 的
............str +=
:949、1130、664 毫秒 / 1e7 +='s
.......[].join()
:[] 中有 3350, 2911, 3522 ms / 1e7 个字符
......[].reduce()
:[] 中的 3954、4228、4547 毫秒 / 1e7 个字符
26 rentetan pada satu masa:
str = str.concat()
:444、744、479 毫秒 / 1e7 concat() 的
............str +=
:1037, 473, 875 毫秒 / 1e7 +='s
........[].join()
:2693, 3394, 3457 ms / 1e7 字符串在 []
......[].reduce()
:[] 中的 2782、2770、4520 ms / 1e7 字符串
Jadi, sama ada menambahkan 1 aksara pada satu masa atau 26 rentetan pada satu masa:
str = str.concat()
和str +=
[].reduce()
,然后是[].join()
Kod saya, mudah dijalankan dalam konsol penyemak imbas:
Dengan ES6, anda boleh menggunakan
Rentetan templat: p>
ES5 dan versi ke bawah:
Gunakan
+
operatorrentetan
concat (..)
Atau, gunakan kaedah tatasusunan:
join( ..)
:Atau lebih eksotik, kurangkan(..) digabungkan dengan mana-mana di atas: