Saya ingin memberi tahu setiap individu string, tetapi saya tidak yakin bagaimana melakukan ini.
Jadi, jika saya punya:
var str = 'This is my string';
Saya ingin secara terpisah dapat mengingatkan T, h, i, s, dll. Ini hanyalah awal dari ide yang sedang saya kerjakan, tetapi saya perlu tahu bagaimana memproses setiap huruf secara terpisah.
Saya ingin menggunakan jQuery dan berpikir saya mungkin perlu menggunakan fungsi split setelah menguji berapa panjang string.
Ide ide?
javascript
jquery
string
Nic Hubbard
sumber
sumber
for(const c of str) { ... }
. Lebih dari itu lebih jauh di bawah ini dalam jawaban yang cukup terperinci tetapi tidak cukup terangkat. PS: @ Tautan ARJUN tidak berfungsi untuk saya.Jawaban:
Jika urutan peringatan penting, gunakan ini:
Jika urutan peringatan tidak masalah, gunakan ini:
Tampilkan cuplikan kode
sumber
[]
untuk mendapatkan arang dalam posisi tertentu tidak didukung di IE <9charAt
tersisa dari UCS-2 hari ketika tidak ada pasangan pengganti dan untuk mengatasi masalah fungsi baru,codepointAt
ditambahkan ke JavaScript yang menangani tumpukan kotoran ramah kita dengan benar. Saya percaya Java juga memilikinya.Mungkin lebih dari selesai. Hanya ingin berkontribusi dengan solusi sederhana lain:
sumber
[...text].forEach(console.log)
forEach()
melewati indeks dan array sebagai argumen kedua dan ketiga. Saya lebih suka tidak mencatatnya ..for (let c of [...text]) { console.log(c) }
let c of text
sudah melakukan pekerjaan.Salah satu solusi yang mungkin dalam javascript murni:
sumber
Cara memproses setiap huruf teks (dengan tolok ukur)
https://jsperf.com/str-for-in-of-foreach-map-2untuk
Klasik dan sejauh ini yang paling berkinerja . Anda harus menggunakan yang ini jika Anda berencana menggunakannya dalam algoritme kinerja kritis, atau yang memerlukan kompatibilitas maksimum dengan versi browser.
untuk ... dari
untuk ... dari adalah ES6 baru untuk iterator. Didukung oleh sebagian besar browser modern. Ini secara visual lebih menarik dan kurang rentan terhadap kesalahan pengetikan. Jika Anda ingin yang ini dalam aplikasi produksi, Anda mungkin harus menggunakan transpiler seperti Babel .
untuk setiap
Pendekatan fungsional . Airbnb disetujui . Kelemahan terbesar dari melakukannya dengan cara ini adalah
split()
, yang menciptakan array baru untuk menyimpan setiap huruf dari string.atau
Berikut ini adalah yang saya sukai.
untuk ... di
Tidak seperti untuk ... dari, Anda mendapatkan indeks surat daripada surat itu. Itu berkinerja sangat buruk.
peta
Pendekatan fungsi, mana yang baik. Namun, peta tidak dimaksudkan untuk digunakan untuk itu. Ini harus digunakan ketika perlu mengubah nilai-nilai di dalam array, yang tidak terjadi.
atau
sumber
for
loop klasik sebenarnya adalah yang paling lambat kedua, sedangkanfor...of
yang tercepat (sekitar tiga kali lebih cepatfor
).for
loop menjadi sedikit lebih cepat.Sebagian besar jika tidak semua jawaban di sini salah karena mereka akan putus setiap kali ada karakter dalam string di luar Unicode BMP (Basic Multilingual Plane) . Itu artinya semua Emoji akan rusak .
JavaScript menggunakan UTF- 16 Unicode untuk semua string. Dalam UTF-16, karakter di luar BMP dibuat dari dua bagian, yang disebut " Pasangan Pengganti " dan sebagian besar jawaban di sini akan memproses setiap bagian dari pasangan demikian secara individual alih-alih sebagai karakter tunggal.
Salah satu cara dalam JavaScript modern sejak setidaknya 2016 adalah dengan menggunakan iterator String baru . Inilah contoh (hampir) langsung dari MDN:
sumber
Anda bisa mencoba ini
sumber
Satu lagi solusi ...
sumber
for..of
loopfor (let ch of t) { alert(ch) }
Ketika saya perlu menulis kode pendek atau satu baris, saya menggunakan "retasan" ini:
Ini tidak akan menghitung baris baru sehingga bisa menjadi hal yang baik atau buruk. Jika Anda ingin memasukkan baris baru, ganti:
/./
dengan/[\S\s]/
. Satu-liner lain yang mungkin Anda lihat mungkin menggunakan.split()
yang memiliki banyak masalahsumber
forEach
panggilan vs params yang dikirimreplace
. Jika saya tahu saya ASCIIing, saya pikir saya masih memiliki beberapa kasus penggunaansplit
. Jawaban yang bagus!u
bendera bersama dengang
bendera? OK baru saja diuji dan saya benar.JS baru memungkinkan ini:
sumber
Lebih baik menggunakan for ... pernyataan, jika string berisi karakter unicode, karena ukuran byte yang berbeda.
sumber
jawaban singkat:
Array.from(string)
akan memberi Anda apa yang mungkin Anda inginkan dan kemudian Anda dapat beralih di atasnya atau apa pun karena itu hanya sebuah array.ok mari kita coba dengan string ini:
abc|β«οΈ\nβͺοΈ|π¨βπ©βπ§βπ§
.codepoint adalah:
jadi beberapa karakter memiliki satu codepoint (byte) dan beberapa memiliki dua atau lebih, dan baris baru ditambahkan untuk pengujian tambahan.
jadi setelah pengujian ada dua cara:
sumber
Anda sekarang dapat mengulangi setiap titik kode Unicode yang terkandung dalam sebuah String dengan menggunakan
String.prototype[@@iterator]
, yang mengembalikan nilai tipe Simbol yang terkenalSymbol.iterator
- iterator default untuk Objek mirip array (String
dalam kasus ini).Kode contoh:
Ini berfungsi dengan karakter Unicode seperti emoji atau karakter non-roman yang akan menyandung konstruksi lama.
Referensi: Tautan MDN ke String.prototype @@ iterator .
sumber
for ... of
loop juga di atas string - yaitu gula sintaks untuk mengakses iterator.Anda sekarang dapat menggunakan di kunci.
sumber
in
adalah bagian sah dari bahasa tersebut. Gunakan segala sesuatu dengan tepat. Artikel Anda memperingatkan bahwain
menafsirkan kunci alfa sama dengan kunci numerik. Begitu? Mungkin itu yang Anda inginkan. Dapat juga dikatakan bahwa metode lain salah mengabaikan kunci alpha. Imo,of
memiliki perilaku yang benar. Dalam array JS, elemen tanpa kunci alfa masih memiliki kunci: yang numerik. Di konsol saya, JS "benar" memperlakukan kunci alfa sama dengan tombol numerik:>const arr = ['a', 'b'] >arr.test = 'hello' >arr 0: "a" 1: "b" test: "hello" length: 2
Anda bisa mendapatkan berbagai karakter individual seperti itu
dan kemudian loop menggunakan Javascript biasa, atau Anda dapat mengulangi karakter string menggunakan jQuery oleh
sumber
Anda dapat mengubah string ini menjadi array menggunakan karakter
split()
, lalu beralih melalui itu.sumber
Jika Anda ingin melakukan transformasi pada teks pada tingkat karakter, dan mendapatkan teks yang diubah kembali di akhir, Anda akan melakukan sesuatu seperti ini:
Jadi langkah-langkahnya:
sumber
Di JavaScript hari ini, Anda bisa
Array.prototype.map.call('This is my string', (c) => c+c)
Jelas, c + c mewakili apa pun yang ingin Anda lakukan dengan c.
Ini kembali
["TT", "hh", "ii", "ss", " ", "ii", "ss", " ", "mm", "yy", " ", "ss", "tt", "rr", "ii", "nn", "gg"]
sumber
[...'This is my string'].map((c)=>c+c)
Ini seharusnya berfungsi di browser lama dan dengan karakter UTF-16 seperti π©.
Ini harus menjadi solusi yang paling kompatibel. Namun, performanya kurang dari a
for
loop.Saya menghasilkan ekspresi reguler menggunakan regexpu
Semoga ini membantu!
sumber
Anda dapat mengakses satu karakter dengan
str.charAt(index)
ataustr[index]
. Namun cara yang terakhir ini bukan bagian dari ECMAScript sehingga Anda sebaiknya menggunakan yang sebelumnya.sumber
Jika Anda ingin menghidupkan setiap karakter Anda mungkin perlu membungkusnya dalam elemen span;
Saya pikir ini adalah cara terbaik untuk melakukannya, kemudian memproses bentang. (misalnya dengan TweenMax)
TweenMax.staggerFromTo ($ demoText.find ("span"), 0,2, {autoAlpha: 0}, {autoAlpha: 1}, 0,1);
sumber
Coba kode ini
sumber