JS Native tidak menyediakan fungsi formatter yang nyaman, dan terlihat kacau dan sulit dibaca dengan splicing karakter, dan sangat tidak nyaman untuk digunakan. Saya pribadi merasa bahwa sintaks yang disediakan dalam C# lebih berguna, seperti:
String.format ("Selamat datang untuk belajar '{0}', '{0}' luar biasa, Anda akan {1} it!", "Javascript", "love");Metode penggantian berurutan ini relatif jelas, dan ketika mengganti konten yang sama, Anda dapat menyimpan situasi parameter duplikat yang lewat. Berikut ini adalah versi implementasi sederhana dari JS (tanpa pengujian yang ketat):
(fungsi (ekspor) {exports.format = function () {var args = array.prototype.slice.call (argumen), sourcestr = args.shift (); function execreplace (teks, penggantian, indeks) {return text.replace (regexp baru ("// {"+{{return {"GEGEXP (" // {") args.reduce (execreplace, sourcestr);}}) (window.utils = window.utils || {}); console.log (utils.format ("Selamat datang untuk belajar '{0}', '{0}' luar biasa, Anda akan {1} itu!", "Javascript", "love", "Anda));Kuncinya adalah kalimat ini:
args.reduce (execreplace, sourcestr);
Di sini, fungsi pengurangan Array digunakan. Kurangi dan reduceright adalah fungsi yang baru ditambahkan di ES5. Parameter fungsi ini dikurangi (callback, initial value). Callback menerima 4 parameter:
Priorvalue:
Saat melintasi entri pertama dari fungsi callback, jika InitialValue ditentukan, InitialValue akan digunakan secara langsung, jika tidak ada elemen pertama dari array yang ditentukan, elemen pertama dari array akan digunakan.
Nilai traversal kedua dan selanjutnya adalah hasil dari traversal sebelumnya.
Hasil yang dikembalikan oleh traversal terakhir akan digunakan sebagai nilai pengembalian fungsi pengurangan.
CurrentValue: Item saat ini dilalui
Indeks: Indeks item saat ini di array
Array: Array asli
Dalam setiap eksekusi di ExecReplace, hasilnya setelah penggantian sebelumnya digunakan sebagai string pengganti asli, indeks item saat ini digunakan sebagai konten yang akan diganti, dan Iterat pada gilirannya untuk akhirnya menyelesaikan konten penggantian.
Catatan: Reduceright pada dasarnya sama dengan Fungsi Pengurangan, kecuali bahwa urutan traversalnya dari kanan ke kiri