Saya memiliki string, katakanlah Hello world
dan saya perlu mengganti char di indeks 3. Bagaimana saya bisa mengganti char dengan menentukan indeks?
var str = "hello world";
Saya butuh sesuatu seperti
str.replaceAt(0,"h");
javascript
string
replace
character-replacement
Santhosh
sumber
sumber
str[0] = 'x'
sepertinya tidak menimbulkan kesalahan, namun tidak memiliki efek yang diinginkan!"use strict"
diaktifkan:Uncaught TypeError: Cannot assign to read only property '0' of string 'hello world'
(setidaknya di browser webkit)Jawaban:
Dalam JavaScript, string tidak dapat diubah , yang berarti yang terbaik yang dapat Anda lakukan adalah membuat string baru dengan konten yang diubah dan menetapkan variabel untuk mengarahkannya.
Anda harus menentukan
replaceAt()
sendiri fungsinya:Dan gunakan seperti ini:
sumber
Tidak ada
replaceAt
fungsi di JavaScript. Anda dapat menggunakan kode berikut untuk mengganti karakter dalam string apa pun pada posisi yang ditentukan:sumber
substr
dianggap sebagai fungsi warisan dan harus dihindari bila memungkinkan .Kamu tidak bisa Ambil karakter sebelum dan sesudah posisi dan masukkan ke string baru:
sumber
String.prototype.substring
lebihString.prototype.substr
.Ada banyak jawaban di sini, dan semuanya didasarkan pada dua metode:
Secara pribadi, saya akan menggunakan dua metode ini dalam kasus yang berbeda. Biarkan saya jelaskan.
@FabioPhms: Metode Anda adalah yang awalnya saya gunakan dan saya takut itu buruk pada string dengan banyak karakter. Namun, pertanyaannya adalah apa yang banyak karakter? Saya mengujinya pada 10 paragraf "lorem ipsum" dan butuh beberapa milidetik. Lalu saya mengujinya pada string 10 kali lebih besar - benar-benar tidak ada perbedaan besar. Hm
@vsync, @Cory Mawhorter: Komentar Anda tidak ambigu; Namun, sekali lagi, apa itu string besar? Saya setuju bahwa untuk 32 ... kinerja 100kb harus lebih baik dan kita harus menggunakan substring-varian untuk operasi penggantian karakter yang satu ini.
Tetapi apa yang akan terjadi jika saya harus membuat beberapa penggantian?
Saya perlu melakukan tes sendiri untuk membuktikan apa yang lebih cepat dalam kasus itu. Katakanlah kita memiliki algoritma yang akan memanipulasi string yang relatif pendek yang terdiri dari 1000 karakter. Kami berharap bahwa rata-rata setiap karakter dalam string itu akan diganti ~ 100 kali. Jadi, kode untuk menguji sesuatu seperti ini adalah:
Saya membuat biola untuk ini, dan itu ada di sini . Ada dua tes, TEST1 (substring) dan TEST2 (konversi array).
Hasil:
Tampaknya konversi array mengalahkan substring dengan 2 kali lipat! Jadi - apa yang terjadi di sini ???
Apa yang sebenarnya terjadi adalah bahwa semua operasi di TEST2 dilakukan pada array itu sendiri, menggunakan ekspresi penugasan seperti
strarr2[p] = n
. Penugasan benar-benar cepat dibandingkan dengan substring pada string besar, dan jelas bahwa itu akan menang.Jadi, ini semua tentang memilih alat yang tepat untuk pekerjaan itu. Lagi.
sumber
Bekerja dengan vektor biasanya paling efektif untuk menghubungi String.
Saya menyarankan fungsi berikut:
Jalankan cuplikan ini:
sumber
Array.prototype.replace = function(index, val) { this[index] = val; return this; };
'word'.split('').replace(1, '0').join(''); // returns 'w0rd'
Dalam string Javascript tidak dapat diubah sehingga Anda harus melakukan sesuatu seperti
Untuk mengganti karakter dalam x at i dengan 'h'
sumber
sumber
split
danjoin
One-liner menggunakan String.replace dengan callback (tanpa dukungan emoji):
Dijelaskan:
sumber
Tampilkan cuplikan kode
Metode ini baik untuk string panjang kecil tetapi mungkin lambat untuk teks yang lebih besar.
sumber
@CemKalyoncu: Terima kasih atas jawaban yang bagus!
Saya juga mengadaptasinya sedikit untuk membuatnya lebih seperti metode Array.splice (dan mempertimbangkan catatan @Ates):
sumber
Array.splice
fungsionalitas tipe.Ini bekerja mirip dengan
Array.splice
:sumber
Kamu bisa mencoba
sumber
Jika Anda ingin mengganti karakter dalam string, Anda harus membuat string yang bisa berubah. Ini pada dasarnya adalah array karakter. Anda dapat membuat pabrik:
Kemudian Anda dapat mengakses karakter dan seluruh array yang dikonversi menjadi string ketika digunakan sebagai string:
sumber
Generalisasi jawaban Afanasii Kurakin, kami memiliki:
Mari kita perluas dan jelaskan persamaan reguler dan fungsi replacer:
Ekspresi reguler
.
sama persis dengan satu karakter. Itug
membuatnya cocok dengan setiap karakter dalam for for. Thereplacer
fungsi disebut diberikan baik karakter asli dan indeks di mana karakter yang dalam string. Kami membuatif
pernyataan sederhana untuk menentukan apakah kami akan kembaliorigChar
atau tidaknewChar
.sumber
Anda dapat memperluas jenis string untuk memasukkan metode inset:
Kemudian Anda dapat memanggil fungsi:
sumber
Saya melakukan fungsi yang melakukan sesuatu yang mirip dengan apa yang Anda minta, memeriksa apakah karakter dalam string adalah dalam array karakter yang tidak diizinkan jika diganti dengan ''
sumber
ini mudah dicapai dengan RegExp!
sumber
Ini adalah versi yang saya buat jika Anda ingin menata kata atau karakter individual pada indeks mereka dalam reaksi / javascript.
Contoh kerja: https://codesandbox.io/s/ov7zxp9mjq
Dan inilah metode alternatif lain
Dan satu lagi ...
sumber
Saya tahu ini sudah tua tetapi solusinya tidak bekerja untuk indeks negatif jadi saya menambahkan tambalan untuk itu. semoga membantu seseorang
sumber
Katakanlah Anda ingin mengganti
Kth
indeks (indeks berbasis 0) dengan'Z'
. Anda dapat menggunakannyaRegex
untuk melakukan ini.sumber
Anda dapat menggunakan fungsi berikut untuk mengganti
Character
atauString
pada posisi tertentu dari sebuah String. Untuk mengganti semua kasus pencocokan berikut, gunakanString.prototype.replaceAllMatches()
fungsi.Uji:
Keluaran:
sumber
Ini solusi saya menggunakan operator ternary dan map. Lebih mudah dibaca, dapat dikelola, lebih mudah dimengerti jika Anda bertanya kepada saya.
Ini lebih ke es6 dan praktik terbaik.
sumber
Metode di sini rumit. Saya akan melakukannya dengan cara ini:
Ini sesederhana yang didapat.
sumber