Bagaimana saya bisa memasukkan string pada indeks spesifik dari string lain?
var txt1 = "foo baz"
Misalkan saya ingin memasukkan "bar" setelah "foo" bagaimana saya bisa mencapainya?
Aku berpikir substring()
, tapi pasti ada jalan yang lebih sederhana dan lurus ke depan.
javascript
string
Jiew Meng
sumber
sumber
Jawaban:
Anda bisa membuat prototipe milik Anda
splice()
menjadi String.Polyfill
Contoh
EDIT: Dimodifikasi untuk memastikan itu
rem
adalah nilai absolut.sumber
slice
solusi di bawah ini lebih baik dan lebih sederhana. (Splice bersifat merusak, slice tidak, dan lebih baik untuk menghindari memodifikasi "objek yang tidak Anda kenal"). Solusi ini seharusnya sama sekali bukan jawaban yang terlihat pertama, meskipun mungkin masuk akal pada saat itu.my_array[my_array.length] = item
bukanmy_array.push(item)
?splice
kasus ini; memang string tidak berubah. Untuk alasan ini saya pikirsplice
adalah pilihan kata kunci yang buruk sekalipun. Keberatan utama saya adalah menentang perluasan prototipe secara sewenang-wenang, kecuali jika itu polyfill standar.Memasukkan pada indeks tertentu (daripada, katakanlah, pada karakter spasi pertama) harus menggunakan slicing / substring string:
sumber
substring
akan baik-baik saja di sini. Saya lebih sukaslice
secara umum karena lebih fleksibel (indeks negatif, misalnya"foo baz".slice(1, -2)
). Ini juga sedikit lebih pendek, untuk sedikit yang layak.`${txt1.slice(0,3)}bar${txt1.slice(3)}`
delete
fitur seperti yang termasuk dalam di atas; jawaban teratas ...Berikut adalah metode yang saya tulis yang berperilaku seperti semua bahasa pemrograman lain:
Referensi:
sumber
{}
ke blok if-else.else
itu berlebihan.Buat saja fungsi berikut:
dan kemudian gunakan seperti itu:
Output: foo bar baz
Berperilaku tepat, seperti C # (Sharp) String.Insert (int startIndex, nilai string).
CATATAN: insert ini menyisipkan fungsi string value (parameter ketiga) sebelum ditentukan bilangan bulat indeks (parameter kedua) dalam string str (parameter pertama), dan kemudian mengembalikan string baru tanpa mengubah str !
sumber
UPDATE 2016: Berikut adalah fungsi prototipe just-for-fun (tapi lebih serius!) Lainnya yang didasarkan pada
RegExp
pendekatan satu-liner (dengan dukungan prependundefined
atau atau negatifindex
):Solusi just-for-fun sebelumnya (kembali ke 2012) :
sumber
Jika ada yang mencari cara untuk memasukkan teks pada beberapa indeks dalam sebuah string, coba ini:
Misalnya, Anda dapat menggunakan ini untuk menyisipkan
<span>
tag pada offset tertentu dalam sebuah string:sumber
6: "<span>"
mengatakan: pada indeks 6, masukkan teks "<span>". Apakah Anda mengatakan bahwa Anda ingin menggunakan nilai variabel integer sebagai indeks penyisipan? Jika itu masalahnya, coba sesuatu sepertivar a=6, text = {}; text[a] = "<span>";
Ini pada dasarnya melakukan apa yang dilakukan @ Bass33 kecuali saya juga memberikan opsi untuk menggunakan indeks negatif untuk dihitung dari akhir. Jenis seperti metode substr memungkinkan.
Gunakan case: Katakanlah Anda memiliki gambar ukuran penuh menggunakan konvensi penamaan tetapi tidak dapat memperbarui data untuk juga menyediakan url thumbnail.
sumber
Dengan contoh Anda saat ini, Anda dapat mencapai hasilnya dengan baik
atau
tetapi mengingat Anda dapat membuat asumsi seperti itu, Anda sebaiknya langsung beralih ke contoh Gullen.
Dalam situasi di mana Anda benar-benar tidak dapat membuat asumsi selain berbasis indeks karakter, maka saya benar-benar akan mencari solusi substring.
sumber
https://jsfiddle.net/gaby_de_wilde/wz69nw9k/
sumber
Saya tahu ini adalah utas lama, namun, ini pendekatan yang sangat efektif.
Apa yang hebat tentang ini adalah bahwa ia memaksa konten node. Jadi, jika simpul ini sudah ada di DOM, Anda tidak perlu menggunakan penyeleksi kueri atau memperbarui innerText. Perubahan akan mencerminkan karena hal itu mengikat.
Jika Anda membutuhkan string, cukup akses properti konten teks node.
sumber
Kita bisa menggunakan metode substring dan slice.
Satu-satunya masalah metode substring adalah tidak akan bekerja dengan indeks negatif. Itu selalu mengambil indeks string dari posisi ke-0.
sumber
Jadi, bagi Anda, itu akan terjadi
insertString("foo baz", "bar", 3);
Jelas, ini akan menjadi cat untuk digunakan karena Anda harus memasok string Anda ke fungsi setiap kali, tetapi saat ini saya tidak tahu bagaimana membuatnya menjadi sesuatu yang lebih mudah seperti a
string.replace(insertion, place)
. Namun, idenya masih berlaku.sumber
Anda dapat menggunakan Ekspresi Reguler dengan pola dinamis .
output:
Ini menggantikan
text.length
karakter spasi putih di awal stringoutput
. TheRegExp
sarana^\
- mulai dari garis\s
karakter ruang putih, berulang{n}
kali, dalam hal initext.length
. Gunakan\\
untuk\
menghindari backslash ketika membangun pola seperti ini dari string.sumber
solusi lain, potong tali menjadi 2 dan masukkan tali di antaranya.
sumber
Anda dapat melakukannya dengan mudah dengan regexp dalam satu baris kode
"Halo, Halo, RegExp!"
sumber
Menggunakan irisan
Anda bisa menggunakannya
slice(0,index) + str + slice(index)
. Atau Anda dapat membuat metode untuk itu.Metode sambatan untuk Strings
Anda dapat
split()
menambahkan string utama dan kemudian gunakan normalsplice()
Menerapkan sambungan () pada banyak indeks
Metode ini mengambil array array setiap elemen array mewakili satu
splice()
.sumber
Saya ingin membandingkan metode menggunakan substring dan metode menggunakan slice dari Base33 dan user113716 masing-masing, untuk melakukan itu saya menulis beberapa kode
lihat juga perbandingan kinerja ini , substring, slice
Kode yang saya gunakan menciptakan string besar dan memasukkan string "bar" beberapa kali ke dalam string besar
Perbedaan umum dalam kinerja adalah marjinal di terbaik dan kedua metode bekerja dengan baik (bahkan pada untaian panjang ~ ~ 12000000)
sumber
Manfaat dari pendekatan ini ada dua:
sumber