วิธีการ Array.prototype.sort คือการเรียงลำดับอาร์เรย์ วิธีการนี้จะใช้พารามิเตอร์ของฟังก์ชันเพื่อระบุกฎการเรียงลำดับ
อันดับแรกเรามาดูการประยุกต์ใช้การเรียงลำดับอย่างง่าย:
วาร์ arr=[2,1,3,4];
alert(arr.sort()) // [1,2,3,4] เรียงจากเล็กไปใหญ่
// ตอนนี้เรียงจากใหญ่ไปเล็กเพื่อให้ได้ [4,3,2,1]
alert(arr.sort(function(left,right){return left>right?-1:1}))
//ในที่นี้ วิธีการเรียงลำดับจะใช้ค่าที่ส่งคืน 1 หรือ -1 ของฟังก์ชันพารามิเตอร์เพื่อตัดสินใจว่าจะเรียงลำดับหรือไม่ order หรือในลำดับย้อนกลับ
จำสิ่งที่ฉันบอกคุณก่อนหน้านี้เกี่ยวกับการใช้วิธีการ Function.apply เพื่อรับองค์ประกอบที่ใหญ่ที่สุดในอาร์เรย์ได้หรือไม่
บทความนี้ใช้สองวิธีที่แตกต่างกันเพื่อให้ได้ค่าสูงสุดในอาร์เรย์
ตอนนี้การเรียงลำดับยังสามารถแสดงได้
var arr=[2,1,3,4];
var minValue=arr.sort()[0];
var maxValue=arr.sort()[arr.length-1] // แล้ว arr.sort().pop()
ล่ะ นี่เป็นวิธีการใช้งานทางเลือกอื่น ไม่จำเป็นต้องเขียนการวนซ้ำ
อย่างไรก็ตาม ฉันต้องชี้ให้เห็นว่าวิธีนี้มีประสิทธิภาพน้อยที่สุด คุณยังสามารถใช้เทคนิคนี้กับอาร์เรย์ที่มีองค์ประกอบหลายสิบหรือหลายร้อยองค์ประกอบได้
อย่างไรก็ตาม หากอาร์เรย์มีขนาดใหญ่มาก การใช้เมธอด sort() อาจช้ามากจนทำให้คุณอยากควัน
การอภิปรายเพิ่มเติมเกี่ยวกับการเรียงลำดับโครงสร้างข้อมูลที่ซับซ้อน
1. การเรียงลำดับอาร์เรย์หลายมิติ
วาร์ arr=[
[2,1,55,4],
[5,3,22,3],
[1,2,77,2],
[9,4,33,5],
-
alert("ค่าเริ่มต้นเรียงตามคอลัมน์แรกn"+arr.sort().join("n"))
alert("ตอนนี้เรียงลำดับตามคอลัมน์ที่สามn"+arr.sort(function(left,right){return left[2]>right[2]?1:-1}).join("n"))
alert("ตอนนี้เรียงลำดับย้อนกลับตามคอลัมน์ที่สามn"+arr.sort(function(left,right){return left[2]>right[2]?-1:1}).join("n ") )
2. จัดเรียงโครงสร้างข้อมูลที่ซับซ้อน
Array.prototype.each=function(f){for(var i=0;i<this.length;i++) f(this[i],i,this)}
ฟังก์ชั่น showName(item){alert(item.name)}; //พิมพ์ชื่อ
var arr=[
{ชื่อ:"บิล",เงิน:500},
{ชื่อ:"go_rush",เงิน:400},
{ชื่อ:"ดูดู",เงิน:9000}
-
//แสดง dudu, bill, go_rush ตามลำดับ ดูเหมือนว่า dudu จะรวยที่สุดและฉันยากจนที่สุด
arr.sort(function(left,right){return left.money>right.money?-1:1}).each(showName)
3. เมื่อวานกำลังจัดเรียงตาราง ฉันได้พูดคุยเกี่ยวกับหัวข้อนี้กับทุกคนเมื่อวานนี้
ดูเพิ่มเติมที่:
http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html
การเรียงลำดับตารางที่ซับซ้อนมากขึ้น (รวมถึงการใช้ฟังก์ชันการเรียงลำดับของ Array ด้วย):
http://community.csdn.net/expert/Topicview2.asp?id=5174915
4. มีส่วนขยายที่ฉลาดมากในการจัดเรียงใน Protype.js มาดูโค้ดกันก่อน:
1 sortBy: function(iterator) {
2 ส่งคืน this.collect (ฟังก์ชัน (ค่า, ดัชนี) {
3 ส่งคืน {value: value, เกณฑ์: ตัววนซ้ำ (ค่า, ดัชนี)};
4 }).sort(ฟังก์ชั่น(ซ้าย,ขวา) {
5 var a = left.criteria, b = right.criteria;
6 ส่งคืน a < b ? -1 : a > b ? 1 : 0;
7 }).pluck('ค่า');
8},
sortBy นี้ช่วยให้คุณสามารถส่งผ่านฟังก์ชัน รันฟังก์ชันโดยให้แต่ละองค์ประกอบของอาร์เรย์เป็นพารามิเตอร์ และสุดท้ายจะเรียงลำดับผลลัพธ์ที่ส่งคืนโดยฟังก์ชัน
ให้ฉันแบ่งหน้าที่ของเขาด้านล่าง
วิธีการรวบรวมเป็นวิธีแผนที่จริง ๆ แล้ว
Array.prototype.map=function(f){
สำหรับ(var i=0;ret=[];i<this.length;i++) ret[i]=f(นี้[i],i,นี้)
กลับมาอีกครั้ง
}
ตัวอย่างเช่น ตอนนี้
อาร์ร์=[2,1,4,3]
iterator=function(x){return x*x}
คุณสามารถรับอาร์เรย์ดังกล่าวได้ในโค้ด 1-3 บรรทัด
-
{value:2,เกณฑ์:4},
{value:1,เกณฑ์:1},
{value:4,เกณฑ์:16},
{value:3,เกณฑ์:9}
]
โค้ด 4-6 บรรทัดเรียงลำดับอาร์เรย์ตามเกณฑ์: จากเล็กไปใหญ่ หลังจากเรียงลำดับแล้ว
-
{value:1,เกณฑ์:1},
{value:2,เกณฑ์:4},
{value:3,เกณฑ์:9},
{value:4,เกณฑ์:16}
]
บรรทัดที่ 7 ของโค้ดนั้นง่ายที่สุด ใช้แอตทริบิวต์ value ของแต่ละองค์ประกอบและสุดท้ายได้รับ [1,2,3,4] เพื่อใช้งาน sortBy(function...) สำหรับการเรียงลำดับ arr
บางทีความสามารถในการแสดงออกทางภาษาของฉันอาจมีจำกัด เมื่อฉันพูดถึง sortBy ใน Prototype.js ฉันแค่ไม่รู้ว่าจะแสดงออกมาเป็นคำพูดอย่างไร
ฉันเสียใจจริงๆ ที่ทุกคนต้องทำงานอย่างหนักเพื่ออ่านโค้ดคำอธิบายที่ฉันเขียน