Ringkasan
Underscore.js adalah perpustakaan yang sangat ramping, dengan hanya kompresi 4kB. Ini menyediakan lusinan metode pemrograman fungsional, yang sangat memfasilitasi pemrograman JavaScript. MVC Framework Backbone.js didasarkan pada perpustakaan ini.
Ini mendefinisikan objek bawah (_), dan semua metode pustaka fungsi milik objek ini. Metode -metode ini dapat dibagi secara kasar menjadi lima kategori: pengumpulan, array, fungsi, objek dan utilitas.
Instal di bawah Node.js
Underscore.js dapat digunakan tidak hanya di lingkungan browser, tetapi juga di node.js. Perintah instalasi adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
NPM menginstal garis bawah
Namun, node.js tidak dapat menggunakan _ secara langsung sebagai nama variabel, jadi Anda perlu menggunakan underscore.js menggunakan metode berikut.
Salinan kode adalah sebagai berikut:
var u = membutuhkan ("underscore");
Metode yang terkait dengan koleksi
Koleksi data bahasa JavaScript, termasuk dua struktur: array dan objek. Metode berikut berlaku untuk kedua struktur.
peta
Metode ini melakukan beberapa operasi pada setiap anggota koleksi secara bergantian, dan menyimpan nilai yang dikembalikan ke array baru secara bergantian.
Salinan kode adalah sebagai berikut:
_.map ([1, 2, 3], fungsi (num) {return num * 3;}); // [3, 6, 9] _.map ({satu: 1, dua: 2, tiga: 3}, fungsi (num, kunci) {return num * 3;}); // [3, 6, 9]
Setiap
Metode ini mirip dengan MAP, melakukan beberapa operasi pada setiap anggota set secara berurutan, tetapi tidak mengembalikan nilai.
Salinan kode adalah sebagai berikut:
_.each ([1, 2, 3], waspada); _.each ({satu: 1, dua: 2, tiga: 3}, peringatan);
Mengurangi
Metode ini melakukan beberapa operasi pada setiap anggota set secara berurutan, dan kemudian mengumpulkan hasil operasi pada nilai awal tertentu. Setelah semua operasi selesai, nilai akumulasi dikembalikan.
Metode ini menerima tiga parameter. Parameter pertama adalah set yang akan diproses, parameter kedua adalah fungsi yang beroperasi pada setiap anggota, dan parameter ketiga adalah variabel yang digunakan untuk menumpuk.
_.reduce ([1, 2, 3], fungsi (memo, num) {return memo + num;}, 0); // 6
Parameter kedua dari metode pengurangan adalah fungsi operasi, yang dengan sendirinya menerima dua parameter. Yang pertama adalah variabel yang digunakan untuk menumpuk, dan yang kedua adalah nilai setiap anggota set.
menyaring dan menolak
Metode filter melakukan beberapa operasi pada setiap anggota koleksi secara bergantian, dan hanya mengembalikan anggota yang hasil operasinya benar.
Salinan kode adalah sebagai berikut:
_.filter ([1, 2, 3, 4, 5, 6], fungsi (num) {return num % 2 == 0;}); // [2, 4, 6]
Metode tolak hanya mengembalikan anggota yang hasil operasinya salah.
Salinan kode adalah sebagai berikut:
_.REJECT ([1, 2, 3, 4, 5, 6], fungsi (num) {return num % 2 == 0;}); // [1, 3, 5]
Setiap dan beberapa
Setiap metode melakukan beberapa operasi pada setiap anggota koleksi secara bergantian. Jika hasil operasi semua anggota adalah benar, itu mengembalikan true, jika tidak ia mengembalikan false.
Salinan kode adalah sebagai berikut:
_.Every ([1, 2, 3, 4, 5, 6], fungsi (num) {return num % 2 == 0;}); // PALSU
Beberapa metode mengembalikan true selama ada hasil operasi anggota, jika tidak salah.
Salinan kode adalah sebagai berikut:
_.some ([1, 2, 3, 4, 5, 6], fungsi (num) {return num % 2 == 0;}); // BENAR
Menemukan
Metode ini melakukan beberapa operasi pada setiap anggota set dalam urutan, mengembalikan anggota yang hasil operasinya pertama benar. Jika hasil operasi semua anggota salah, tidak ditentukan dikembalikan.
Salinan kode adalah sebagai berikut:
_.find ([1, 2, 3, 4, 5, 6], fungsi (num) {return num % 2 == 0;}); // 2
berisi
Jika suatu nilai berada dalam set, metode ini mengembalikan true, jika tidak, ia mengembalikan False.
Salinan kode adalah sebagai berikut:
_.contains ([1, 2, 3], 3); // BENAR
Countby
Metode ini melakukan beberapa operasi pada setiap anggota set dalam urutan, menghitung anggota dengan hasil operasi yang sama sebagai kelas, dan akhirnya mengembalikan objek, menunjukkan jumlah anggota yang sesuai dengan setiap hasil operasi.
Salinan kode adalah sebagai berikut:
_.countby ([1, 2, 3, 4, 5], fungsi (num) {return num % 2 == 0? 'bahkan': 'ganjil';}); // {ganjil: 3, bahkan: 2}
Shuffle
Metode ini mengembalikan kumpulan pesanan yang tidak teratur.
Salinan kode adalah sebagai berikut:
_.shuffle ([1, 2, 3, 4, 5, 6]); // [4, 1, 6, 3, 5, 2]
ukuran
Metode ini mengembalikan jumlah anggota koleksi.
Salinan kode adalah sebagai berikut:
_.size ({satu: 1, dua: 2, tiga: 3}); // 3
Metode terkait objek
Toarray
Metode ini mengubah objek menjadi array.
Salinan kode adalah sebagai berikut:
_.toArray ({A: 0, B: 1, C: 2}); // [0, 1, 2]
memetik
Metode ini mengekstraksi nilai properti dari beberapa objek ke dalam array.
Salinan kode adalah sebagai berikut:
var standes = [{name: 'moe', usia: 40}, {name: 'Larry', usia: 50}, {name: 'curly', usia: 60}]; _.pruck (stooges, 'name'); // ["Moe", "Larry", "Curly"]
Metode yang terkait dengan fungsi
mengikat
Metode ini mengikat konteks runtime fungsi dan kembali sebagai fungsi baru.
Salinan kode adalah sebagai berikut:
_.bind (fungsi, objek, [*argumen])
Silakan lihat contoh di bawah ini.
Salinan kode adalah sebagai berikut:
var o = {p: 2, m: function () {console.log (p);}}; om () // 2 _.bind (om, {p: 1}) () // 1
Bindall
Metode ini mengikat semua metode suatu objek (kecuali ditentukan lain) ke objek itu.
Salinan kode adalah sebagai berikut:
var buttonview = {label: 'underscore', ontClick: function () {alert ('diklik:' + this.label); }, onhover: function () {console.log ('hovering:' + this.label); }}; _.bindall (ButtonView);
sebagian
Pengikatan metode ini mengikat fungsi ke parameter dan kembali sebagai fungsi baru.
Salinan kode adalah sebagai berikut:
var add = function (a, b) {return a + b; }; add5 = _.partial (add, 5); add5 (10); // 15
Memoize
Metode ini menyimpan hasil yang berjalan dari suatu fungsi untuk parameter.
Salinan kode adalah sebagai berikut:
var fibonacci = _.memoize (function (n) {return n <2? n: fibonacci (n - 1) + fibonacci (n - 2);});
Jika suatu fungsi memiliki beberapa parameter, fungsi hash perlu disediakan untuk menghasilkan nilai hash yang mengidentifikasi cache.
menunda
Metode ini dapat menunda fungsi untuk waktu yang ditentukan sebelum berjalan.
Salinan kode adalah sebagai berikut:
var log = _.bind (console.log, konsol); _.delay (log, 1000, 'dicatat nanti'); // 'login nanti'
menunda
Metode ini dapat menunda fungsi sampai jumlah tugas yang akan dijalankan adalah 0 sebelum berjalan, mirip dengan efek setTimeout menunda menjalankan dengan 0 detik.
Salinan kode adalah sebagai berikut:
_.defer (function () {alert ('ditangguhkan');});
mencekik
Metode ini mengembalikan versi fungsi baru. Saat memanggil versi baru dari fungsi ini secara terus menerus, Anda harus menunggu periode waktu tertentu sebelum eksekusi berikutnya akan dipicu.
Salinan kode adalah sebagai berikut:
// Kembalikan versi baru dari fungsi UpdatePosition var throttled = _.throttle (updatePosition, 100); // Versi baru fungsi hanya akan memicu $ (window) .scroll (throttled);
Debounce
Metode ini juga mengembalikan versi fungsi baru. Setiap kali versi baru dari fungsi ini dipanggil, itu harus merupakan interval waktu tertentu dari panggilan terakhir, jika tidak akan tidak valid. Aplikasi khasnya adalah untuk mencegah pengguna mengklik dua kali tombol, menghasilkan dua formulir pengiriman.
Salinan kode adalah sebagai berikut:
$ ("Tombol"). On ("Klik", _.debounce (SubmitForm, 1000));
sekali
Metode ini mengembalikan versi fungsi baru sehingga fungsi hanya dapat dijalankan sekali. Terutama digunakan untuk inisialisasi objek.
Salinan kode adalah sebagai berikut:
var initialize = _.once (createApplication); inisialisasi (); inisialisasi (); // Aplikasi dibuat hanya sekali
Setelah
Metode ini mengembalikan versi baru dari fungsi, yang hanya akan dijalankan setelah dipanggil beberapa kali. Ini terutama digunakan untuk mengkonfirmasi bahwa satu set operasi diselesaikan sebelum bereaksi.
Salinan kode adalah sebagai berikut:
var rennotes = _.after (note.length, render); _.each (notes, function (note) {note.asyncsave ({Success: rernotes});}); // semua catatan disimpan, rendernote akan berjalan sekali
membungkus
Metode ini melewati satu fungsi sebagai parameter ke fungsi lain, dan akhirnya mengembalikan versi baru yang pertama.
Salinan kode adalah sebagai berikut:
var hello = function (name) {return "hello:" + name; }; hello = _.wrap (halo, fungsi (func) {return "sebelumnya," + func ("moe") + ", after";}); Halo(); // 'Sebelumnya, halo: moe, setelah'
menyusun
Metode ini menerima serangkaian fungsi sebagai parameter, berjalan dari belakang ke maju, dan hasil berjalan dari fungsi sebelumnya digunakan sebagai parameter berjalan dari fungsi berikutnya. Artinya, konversi bentuk f (g (), h ()) menjadi f (g (h ())).
Salinan kode adalah sebagai berikut:
var salam = fungsi (name) {return "hai:" + name; }; var excem = function (pernyataan) {pernyataan return + "!"; }; var welcome = _.compose (berseru, sapa); selamat datang ('moe'); // 'Hai: Moe!'
Alat dan metode
templat
Metode ini digunakan untuk mengkompilasi templat HTML. Itu menerima tiga parameter.
Salinan kode adalah sebagai berikut:
_.template (templateString, [data], [Pengaturan])
Makna dari tiga parameter adalah sebagai berikut:
TemplateString: String template
Data: Masukkan data templat
Pengaturan: Pengaturan
TemplateString
Template string templateString adalah bahasa HTML biasa, di mana variabel dimasukkan dalam bentuk < %= ... %>; Objek data bertanggung jawab untuk memberikan nilai variabel.
Salinan kode adalah sebagai berikut:
var txt = "
< %= Word %>
Salinan kode adalah sebagai berikut:
"; _.template (txt, {word:" hello world "}) //"
Halo dunia
Salinan kode adalah sebagai berikut:
"
Jika nilai suatu variabel berisi lima karakter khusus (& <> ” /), itu perlu diloloskan dengan < %-… %>.
Salinan kode adalah sebagai berikut:
var txt = "
< %- Word %>
Salinan kode adalah sebagai berikut:
"; _.template (txt, {word:" h & w "}) //
H&W
Perintah JavaScript dapat dimasukkan dalam bentuk < %… %>. Di bawah ini adalah contoh dari pernyataan penilaian.
Salinan kode adalah sebagai berikut:
var txt = "< %var i = 0; if (i <1) { %>" + "< %= word %>" + "< %} %>"; _.template (txt, {word: "hello world"}) // halo dunia
Penggunaan umum termasuk pernyataan loop.
Salinan kode adalah sebagai berikut:
var list = "< % _.each (orang, fungsi (nama) { %>
<%= name%> <%}); %> "; _.template (daftar, {orang: ['moe', 'curly', 'larry']}); //"
Moe
keriting
Larry ”
Jika metode template hanya memiliki parameter pertama templateString dan parameter kedua dihilangkan, maka fungsi akan dikembalikan, dan data dapat dimasukkan ke fungsi ini di masa mendatang.
Salinan kode adalah sebagai berikut:
var t1 = _.template ("halo <%= user%>!"); T1 ({User: ""}) // 'Halo!'
data
Semua variabel dalam templateString adalah atribut internal dari objek OBJ, dan objek OBJ mengacu pada objek data parameter kedua. Dua kalimat berikut setara.
Salinan kode adalah sebagai berikut:
_.template ("halo <%= user%>!", {user: ""}) _.template ("halo <%= obj.user%>!", {user: ""})
Jika Anda ingin mengubah nama objek OBJ, Anda harus mengaturnya di parameter ketiga.
Salinan kode adalah sebagai berikut:
_.template ("< %if (data.title) { %> title: < %= title %> < %} %>", null, {variabel: "data"});
Karena template digunakan dengan pernyataan secara internal saat mengganti variabel, metode di atas akan berjalan lebih cepat.