ภาพรวม
ENDERSCORE.JS เป็นห้องสมุดที่ไม่ติดมันมากมีการบีบอัด 4KB เพียง 4KB มันมีวิธีการเขียนโปรแกรมที่ใช้งานได้หลายสิบวิธีซึ่งอำนวยความสะดวกอย่างมากในการเขียนโปรแกรม JavaScript MVC Framework Backbone.js ขึ้นอยู่กับห้องสมุดนี้
มันกำหนดวัตถุขีดเส้นใต้ (_) และวิธีการทั้งหมดของไลบรารีฟังก์ชันเป็นของวัตถุนี้ วิธีการเหล่านี้สามารถแบ่งออกเป็นห้าหมวดหมู่ ได้แก่ คอลเลกชันอาร์เรย์ฟังก์ชั่นวัตถุและยูทิลิตี้
ติดตั้งภายใต้ node.js
enderscore.js สามารถใช้ไม่เพียง แต่ในสภาพแวดล้อมของเบราว์เซอร์เท่านั้น แต่ยังอยู่ใน Node.js คำสั่งการติดตั้งมีดังนี้:
การคัดลอกรหัสมีดังนี้:
NPM ติดตั้งขีดล่าง
อย่างไรก็ตาม node.js ไม่สามารถใช้ _ โดยตรงเป็นชื่อตัวแปรดังนั้นคุณต้องใช้ Underscore.js โดยใช้วิธีการต่อไปนี้
การคัดลอกรหัสมีดังนี้:
var u = ต้องการ ("ขีดล่าง");
วิธีการที่เกี่ยวข้องกับคอลเลกชัน
การรวบรวมข้อมูลของภาษาจาวาสคริปต์รวมถึงสองโครงสร้าง: อาร์เรย์และวัตถุ วิธีการต่อไปนี้ใช้กับโครงสร้างทั้งสอง
แผนที่
วิธีนี้ดำเนินการบางอย่างกับสมาชิกแต่ละคนของคอลเลกชันและเก็บค่าที่ส่งคืนไว้ในอาร์เรย์ใหม่ในทางกลับกัน
การคัดลอกรหัสมีดังนี้:
_.map ([1, 2, 3], ฟังก์ชัน (num) {return num * 3;}); // [3, 6, 9] _.map ({one: 1, สอง: 2, สาม: 3}, ฟังก์ชัน (num, key) {return num * 3;}); // [3, 6, 9]
แต่ละ
วิธีนี้คล้ายกับ MAP ดำเนินการบางอย่างในสมาชิกแต่ละคนของชุดในลำดับ แต่ไม่คืนค่า
การคัดลอกรหัสมีดังนี้:
_.each ([1, 2, 3], แจ้งเตือน); _.each ({one: 1, สอง: 2, สาม: 3}, การแจ้งเตือน);
ลด
วิธีนี้ดำเนินการบางอย่างกับสมาชิกแต่ละคนของชุดตามลำดับจากนั้นสะสมผลการดำเนินการในค่าเริ่มต้นที่แน่นอน หลังจากการดำเนินการทั้งหมดเสร็จสิ้นค่าสะสมจะถูกส่งคืน
วิธีนี้ยอมรับพารามิเตอร์สามตัว พารามิเตอร์แรกคือชุดที่จะประมวลผลพารามิเตอร์ที่สองคือฟังก์ชันที่ทำงานกับสมาชิกแต่ละคนและพารามิเตอร์ที่สามคือตัวแปรที่ใช้ในการสะสม
_.reduce ([1, 2, 3], ฟังก์ชั่น (บันทึก, num) {return memo + num;}, 0); // 6
พารามิเตอร์ที่สองของวิธีการลดคือฟังก์ชั่นการทำงานซึ่งยอมรับพารามิเตอร์สองตัว อย่างแรกคือตัวแปรที่ใช้ในการสะสมและที่สองคือค่าของสมาชิกแต่ละคนของชุด
กรองและปฏิเสธ
วิธีการกรองดำเนินการบางอย่างในสมาชิกแต่ละคนของคอลเลกชันในทางกลับกันและส่งคืนสมาชิกที่มีผลการดำเนินการเป็นจริง
การคัดลอกรหัสมีดังนี้:
_.filter ([1, 2, 3, 4, 5, 6], ฟังก์ชั่น (num) {return num % 2 == 0;}); // [2, 4, 6]
วิธีการปฏิเสธจะส่งคืนสมาชิกที่ผลการดำเนินการเป็นเท็จ
การคัดลอกรหัสมีดังนี้:
_.reject ([1, 2, 3, 4, 5, 6], ฟังก์ชั่น (num) {return num % 2 == 0;}); // [1, 3, 5]
ทุก ๆ
ทุกวิธีดำเนินการบางอย่างในสมาชิกแต่ละคนของคอลเลกชัน หากผลการดำเนินการของสมาชิกทุกคนเป็นจริงมันจะกลับมาจริงมิฉะนั้นจะส่งกลับเท็จ
การคัดลอกรหัสมีดังนี้:
_.every ([1, 2, 3, 4, 5, 6], ฟังก์ชั่น (num) {return num % 2 == 0;}); // เท็จ
บางวิธีส่งกลับจริงตราบใดที่มีผลการดำเนินงานของสมาชิกมิฉะนั้นเท็จ
การคัดลอกรหัสมีดังนี้:
_.some ([1, 2, 3, 4, 5, 6], ฟังก์ชั่น (num) {return num % 2 == 0;}); // จริง
หา
วิธีนี้ดำเนินการบางอย่างกับสมาชิกแต่ละคนของชุดในลำดับโดยส่งคืนสมาชิกที่มีผลการดำเนินการครั้งแรกเป็นจริง หากผลการดำเนินการของสมาชิกทุกคนเป็นเท็จจะถูกส่งคืน
การคัดลอกรหัสมีดังนี้:
_.find ([1, 2, 3, 4, 5, 6], ฟังก์ชั่น (num) {return num % 2 == 0;}); // 2
ประกอบด้วย
หากค่าอยู่ในชุดเมธอดจะส่งกลับจริงมิฉะนั้นจะส่งคืนเท็จ
การคัดลอกรหัสมีดังนี้:
_.contains ([1, 2, 3], 3); // จริง
นับ
วิธีนี้ดำเนินการบางอย่างในสมาชิกแต่ละคนของชุดในลำดับนับสมาชิกที่มีผลการดำเนินการเดียวกันกับคลาสและในที่สุดก็ส่งคืนวัตถุแสดงจำนวนสมาชิกที่สอดคล้องกับผลการดำเนินการแต่ละครั้ง
การคัดลอกรหัสมีดังนี้:
_.countby ([1, 2, 3, 4, 5], ฟังก์ชั่น (NUM) {return num % 2 == 0? 'even': 'คี่';}); // {คี่: 3, แม้: 2}
การสับเปลี่ยน
วิธีนี้ส่งคืนคอลเลกชันของคำสั่งที่ไม่เป็นระเบียบ
การคัดลอกรหัสมีดังนี้:
_.Shuffle ([1, 2, 3, 4, 5, 6]); // [4, 1, 6, 3, 5, 2]
ขนาด
วิธีนี้ส่งคืนจำนวนสมาชิกของคอลเลกชัน
การคัดลอกรหัสมีดังนี้:
_.size ({one: 1, สอง: 2, สาม: 3}); // 3
วิธีการที่เกี่ยวข้องกับวัตถุ
toarray
วิธีนี้แปลงวัตถุเป็นอาร์เรย์
การคัดลอกรหัสมีดังนี้:
_.toarray ({a: 0, b: 1, c: 2}); // [0, 1, 2]
ถอนออก
วิธีนี้แยกค่าของคุณสมบัติของวัตถุหลาย ๆ วัตถุลงในอาร์เรย์
การคัดลอกรหัสมีดังนี้:
var standes = [{ชื่อ: 'moe', อายุ: 40}, {ชื่อ: 'larry', อายุ: 50}, {ชื่อ: 'หยิก', อายุ: 60}]; _.pluck (stooges, 'ชื่อ'); // ["Moe", "Larry", "Curly"]
วิธีการที่เกี่ยวข้องกับฟังก์ชั่น
ผูก
วิธีนี้ผูกบริบทของฟังก์ชั่นรันไทม์และส่งคืนเป็นฟังก์ชั่นใหม่
การคัดลอกรหัสมีดังนี้:
_.bind (ฟังก์ชั่น, วัตถุ, [*อาร์กิวเมนต์])
โปรดดูตัวอย่างด้านล่าง
การคัดลอกรหัสมีดังนี้:
var o = {p: 2, m: function () {console.log (p);}}; om () // 2 _.bind (om, {p: 1}) () // 1
มัด
วิธีนี้เชื่อมโยงวิธีการทั้งหมดของวัตถุ (เว้นแต่จะระบุไว้เป็นอย่างอื่น) กับวัตถุนั้น
การคัดลอกรหัสมีดังนี้:
var buttonView = {label: 'Underscore', onclick: function () {Alert ('คลิก:' + this.label); }, onhover: function () {console.log ('โฮเวอร์:' + this.label); - _.bindall (ButtonView);
บางส่วน
วิธีการนี้มีผลผูกพันฟังก์ชันกับพารามิเตอร์และส่งคืนเป็นฟังก์ชันใหม่
การคัดลอกรหัสมีดังนี้:
var add = function (a, b) {return a + b; - add5 = _.partial (เพิ่ม, 5); add5 (10); // 15
บันทึกความทรงจำ
วิธีนี้แคชผลลัพธ์การทำงานของฟังก์ชั่นสำหรับพารามิเตอร์
การคัดลอกรหัสมีดังนี้:
var fibonacci = _.memoize (ฟังก์ชั่น (n) {return n <2? n: fibonacci (n - 1) + fibonacci (n - 2);});
หากฟังก์ชั่นมีพารามิเตอร์หลายพารามิเตอร์จะต้องมีการจัดหาแฮชฟังก์ชันเพื่อสร้างค่าแฮชที่ระบุแคช
ล่าช้า
วิธีนี้สามารถชะลอฟังก์ชั่นตามเวลาที่กำหนดก่อนทำงาน
การคัดลอกรหัสมีดังนี้:
var log = _.bind (console.log, คอนโซล); _.delay (บันทึก, 1,000, 'บันทึกในภายหลัง'); // 'บันทึกในภายหลัง'
เลื่อนลอย
วิธีนี้สามารถเลื่อนฟังก์ชั่นได้จนกว่าจำนวนงานที่จะรันคือ 0 ก่อนที่จะทำงานคล้ายกับผลของการตกตะกอนที่ล่าช้าในการทำงานภายใน 0 วินาที
การคัดลอกรหัสมีดังนี้:
_.defer (ฟังก์ชัน () {แจ้งเตือน ('รอการตัดบัญชี');});
คันเร่ง
วิธีนี้ส่งคืนฟังก์ชันเวอร์ชันใหม่ เมื่อเรียกฟังก์ชั่นเวอร์ชันใหม่นี้อย่างต่อเนื่องคุณต้องรอระยะเวลาหนึ่งก่อนที่จะมีการเรียกใช้งานครั้งต่อไป
การคัดลอกรหัสมีดังนี้:
// ส่งคืนฟังก์ชั่น updatePosition เวอร์ชันใหม่ var throttled = _. Throttle (UpdatePosition, 100); // ฟังก์ชั่นเวอร์ชันใหม่จะทริกเกอร์ $ (หน้าต่าง). scroll (เค้น);
การลบล้าง
วิธีนี้ยังส่งคืนฟังก์ชันเวอร์ชันใหม่ ทุกครั้งที่เรียกฟังก์ชั่นเวอร์ชันใหม่นี้จะต้องเป็นช่วงเวลาที่แน่นอนจากการโทรครั้งสุดท้ายมิฉะนั้นจะไม่ถูกต้อง แอปพลิเคชันทั่วไปของมันคือการป้องกันไม่ให้ผู้ใช้ดับเบิลคลิกปุ่มส่งผลให้ส่งสองรูปแบบ
การคัดลอกรหัสมีดังนี้:
$ ("ปุ่ม") บน ("คลิก", _.debounce (submitfor, 1000));
ครั้งหนึ่ง
วิธีนี้ส่งคืนฟังก์ชันเวอร์ชันใหม่เพื่อให้ฟังก์ชั่นสามารถเรียกใช้ได้เพียงครั้งเดียว ส่วนใหญ่ใช้สำหรับการเริ่มต้นวัตถุ
การคัดลอกรหัสมีดังนี้:
var initialize = _.once (createApplication); เริ่มต้น (); เริ่มต้น (); // แอปพลิเคชันถูกสร้างขึ้นเพียงครั้งเดียว
หลังจาก
วิธีนี้ส่งคืนฟังก์ชั่นเวอร์ชันใหม่ซึ่งจะเรียกใช้หลังจากเรียกจำนวนครั้งที่แน่นอน ส่วนใหญ่จะใช้เพื่อยืนยันว่าชุดการดำเนินการเสร็จสมบูรณ์ก่อนที่จะทำปฏิกิริยา
การคัดลอกรหัสมีดังนี้:
var renderNotes = _.after (note.length, render); _.each (หมายเหตุ, ฟังก์ชั่น (หมายเหตุ) {note.asyncSave ({ความสำเร็จ: RENDERNOTES});}); // บันทึกทั้งหมดจะถูกบันทึก RenderNote จะทำงานหนึ่งครั้ง
ห่อ
วิธีนี้ผ่านฟังก์ชั่นหนึ่งเป็นพารามิเตอร์ไปยังฟังก์ชั่นอื่นและในที่สุดก็ส่งคืนเวอร์ชันใหม่ของอดีต
การคัดลอกรหัสมีดังนี้:
var hello = function (ชื่อ) {return "hello:" + name; - สวัสดี = _.wrap (สวัสดีฟังก์ชั่น (func) {return "ก่อนหน้า" + func ("moe") + ", หลังจาก";}); สวัสดี(); // 'ก่อนหน้านี้สวัสดี: Moe, After'
แต่งเพลง
วิธีนี้ยอมรับชุดของฟังก์ชั่นเป็นพารามิเตอร์ทำงานจากย้อนกลับไปข้างหน้าและผลลัพธ์การรันของฟังก์ชั่นก่อนหน้านี้ใช้เป็นพารามิเตอร์การรันของฟังก์ชันถัดไป กล่าวคือแปลงรูปแบบของ f (g (), h ()) เป็น f (g (h ()))
การคัดลอกรหัสมีดังนี้:
var greet = function (ชื่อ) {return "hi:" + name; - var excem = function (คำสั่ง) {return statement + "!"; - var welcome = _.compose (อุทาน, ทักทาย); ยินดีต้อนรับ ('moe'); // 'สวัสดี: โม!'
เครื่องมือและวิธีการ
เทมเพลต
วิธีนี้ใช้ในการรวบรวมเทมเพลต HTML มันยอมรับพารามิเตอร์สามตัว
การคัดลอกรหัสมีดังนี้:
_.Template (Templatestring, [data], [การตั้งค่า])
ความหมายของพารามิเตอร์ทั้งสามมีดังนี้:
Templatestring: สตริงเทมเพลต
ข้อมูล: ป้อนข้อมูลของเทมเพลต
การตั้งค่า: การตั้งค่า
เทมพลาเทอร์
เทมเพลตสตริง templatestring เป็นภาษา HTML ธรรมดาซึ่งตัวแปรจะถูกแทรกในรูปแบบของ < %= … %>; วัตถุข้อมูลมีหน้าที่รับผิดชอบในการให้ค่าของตัวแปร
การคัดลอกรหัสมีดังนี้:
var txt = "
< %= word %>
การคัดลอกรหัสมีดังนี้:
"; _.template (txt, {Word:" Hello World "}) //"
สวัสดีโลก
การคัดลอกรหัสมีดังนี้:
-
หากค่าของตัวแปรมีห้าอักขระพิเศษ (& <> "' /) มันจะต้องถูกหลบหนีด้วย < %- … %>
การคัดลอกรหัสมีดังนี้:
var txt = "
< %- Word %>
การคัดลอกรหัสมีดังนี้:
"; _.template (txt, {word:" h & w "}) //
H&W
คำสั่ง JavaScript สามารถแทรกในรูปแบบของ < % … %> ด้านล่างเป็นตัวอย่างของคำพิพากษา
การคัดลอกรหัสมีดังนี้:
var txt = "< %var i = 0; ถ้า (i <1) { %>" + "< %= word %>" + "< %} %>"; _.template (txt, {word: "hello world"}) // hello world
การใช้งานทั่วไปรวมถึงคำสั่งวนรอบ
การคัดลอกรหัสมีดังนี้:
var list = "< % _.each (คน, ฟังก์ชั่น (ชื่อ) { %>
<%= ชื่อ%> <%}); %> "; _.template (รายการ, {คน: ['moe', 'curly', 'larry']}); //"
โม
หยิกงอ
ลาร์รี”
หากวิธีการเทมเพลตมีเพียงพารามิเตอร์แรก templatestring และพารามิเตอร์ที่สองจะถูกละเว้นฟังก์ชันจะถูกส่งกลับและข้อมูลสามารถป้อนเข้ากับฟังก์ชั่นนี้ในอนาคต
การคัดลอกรหัสมีดังนี้:
var t1 = _.template ("สวัสดี <%= ผู้ใช้%>!"); T1 ({ผู้ใช้: ""}) // 'สวัสดี!'
ข้อมูล
ตัวแปรทั้งหมดใน templatestring เป็นคุณลักษณะภายในของวัตถุ OBJ และวัตถุ OBJ หมายถึงวัตถุข้อมูลพารามิเตอร์ที่สอง สองประโยคต่อไปนี้เทียบเท่า
การคัดลอกรหัสมีดังนี้:
_.template ("สวัสดี <%= ผู้ใช้%>!", {ผู้ใช้: ""}) _.template ("สวัสดี <%= obj.user%>!", {ผู้ใช้: ""})
หากคุณต้องการเปลี่ยนชื่อของวัตถุ OBJ คุณต้องตั้งค่าในพารามิเตอร์ที่สาม
การคัดลอกรหัสมีดังนี้:
_.template ("< %ถ้า (data.title) { %> title: < %= title %> < %} %>", null, {ตัวแปร: "data"});
เนื่องจากเทมเพลตใช้กับคำสั่งภายในเมื่อเปลี่ยนตัวแปรวิธีการข้างต้นจะทำงานได้เร็วขึ้น