เมื่อเร็ว ๆ นี้ปัญหาของการเรียงลำดับ JS คือการเรียงลำดับฐานข้อมูลนั้นใช้ทรัพยากรมากเกินไป ในลูกค้ายกเว้น JS มันเป็นเช่นเดียวกับ แก่นแท้ แก่นแท้ หลังจากการทดสอบของฉันการเรียงลำดับ JS Built -in Method มีประสิทธิภาพมาก
เรารู้ว่าฟังก์ชั่นการเรียงลำดับนั้นมาจากค่าเริ่มต้นใน JS แต่ฟังก์ชั่นนี้ถูกจัดเรียงตามรหัส ASCII ของเนื้อหาอาร์เรย์ มีฟังก์ชั่น multi_sort ใน PHP ที่เรียกมัน แต่ดูเหมือนว่าจะไม่มีฟังก์ชั่นดังกล่าวใน JS แต่ไม่สำคัญเพราะฟังก์ชั่นการเรียงลำดับของ JS ยังมีพารามิเตอร์ที่สามารถกำหนดฟังก์ชันการเปรียบเทียบสำหรับอาร์เรย์สองมิติ
1. เรียงลำดับตามค่าตัวเลข
สมมติว่าอาร์เรย์ต่อไปนี้
คัดลอกรหัสรหัสดังนี้:
var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];
เราจะทำอย่างไรถ้าเราต้องการเรียงลำดับคอลัมน์แรกของแต่ละ sub -array?
คัดลอกรหัสรหัสดังนี้:
arr.sort (ฟังก์ชั่น (x, y) {
กลับ x [0] y [0];
-
บทบาทของฟังก์ชั่นการเปรียบเทียบที่นี่คืออะไร? ในความเป็นจริงอาร์เรย์จะถูกคัดลอกไปยัง x, y ตามลำดับตัวอย่างเช่นการกำหนด arr [0] ถึง x, arr [1] ถึง y จากนั้นใช้ x [0] y [0] เพื่อส่งคืนตาม ค่าส่งคืน และสองรายการแรกจะถูกจัดเรียง นี่คือฟังก์ชั่นการเปรียบเทียบของลำดับเริ่มต้น ถูกจัดเรียงในคอลัมน์แรก การเรียงลำดับที่นี่จะแก้ไขโครงสร้างอาร์เรย์ของ ARR ดังนั้นการเรียงลำดับ ARR เป็นอาร์เรย์ที่ได้รับการส่งเสริมตามคอลัมน์แรก
2. เรียงลำดับตามสตริง
หากคุณถูกจัดเรียงด้วยสตริงเราสามารถใช้วิธีการ LocalEcompare โดย JS
LocalEcompare: เปรียบเทียบสองสตริงตามลำดับเฉพาะ
กฎการใช้งานของวิธี LocalEcompare คือ StringObject.localEcompare (เป้าหมาย) หาก StringObject มากกว่าเป้าหมายวิธีการจะส่งคืนตัวเลขมากกว่า 0 หากสตริงทั้งสองเท่ากันหรือไม่มีความแตกต่างตามกฎการเรียงลำดับในท้องถิ่นวิธีนี้จะส่งคืน 0. อุปกรณ์จะถูกเปรียบเทียบกับกฎท้องถิ่น ระบบปฏิบัติการ
ตัวอย่างเช่น
คัดลอกรหัสรหัสดังนี้:
var arr = [['กลาง', 'ประเทศ'], ['ah', ''], ['oh', '', '];
arr.sort (ฟังก์ชั่น (x, y) {
return x [0] .localeCompare (y [0]);
-
เป็นผลให้มันถูกจัดเรียงในพินอินของคอลัมน์แรกของตัวละครจีน ของสตริงถูกจัดเรียงรวมถึงแถวผสมจีนและชิโน -บริทช์ สำหรับการสั่งซื้อการสั่งซื้อวิธีการเหมือนกับข้างต้นและวิธีการเปลี่ยนเป็นคืน y [0] .localeCompare (x [0]);
ด้วยวิธีนี้ปัญหาของการเรียงลำดับจะรับรู้และยังมีอีกหลายสถานที่สำหรับ js สองอาร์เรย์มิติ JS หวังว่าจะช่วยเหลือบางคน
คัดลอกรหัสรหัสดังนี้:
ฟังก์ชั่น tblsort (s) {
สำหรับ (r = 0; r <right_len; r ++) {
arrs [r] = []
สำหรับ (c = 0; c <cel_len; c ++) {
arrrs [r] [c] = {} // สร้างวัตถุอื่นในอาร์เรย์สองมิติ;
arrs [r] [c] .html = table.rows [r] .cells [c] .innerhtml // ใส่ตารางของ html ลงในอาร์เรย์ที่เกี่ยวข้องและแสดงบนหน้าหลังจากการเรียงลำดับ;
var text = table.rows [r] .cells [c] .innertext // รับเนื้อหาข้อความของแบบฟอร์มสำหรับการตัดสินต่อไปนี้;
// การตรวจจับที่อาจปรากฏเป็นลบหากข้อมูลไม่ปกติจัดอันดับในตอนท้าย
if (text == '-') {{
arrs [r] [c] .text = '-1';
} อื่นถ้า (text == 'reintegle') {{
arrs [r] [c] .text = '-2';
} อื่นถ้า (text == 'ไม่มี baidu snapshot' || text == 'ไม่มีข้อมูลการจัดอันดับ') {
arrs [r] [c] .text = '-3'
} อื่นถ้า (text == '') {
arrs [r] [c] .text = '-4'
} อื่น {
arrs [r] [c] .text = table.rows [r] .cells [c] .innertext // ใส่เนื้อหาข้อความของตารางลงในอาร์เรย์ที่เกี่ยวข้อง สำหรับการเรียงลำดับด้านล่างสำหรับการเรียงลำดับ
-
-
-
// Alert (arrs [0] [0] ['text'])
// Reve Judgement ถูกจัดเรียงหรือ desewess ในปัจจุบัน;
ถ้า (Reve) {
arrs.sort (ฟังก์ชั่น (x, y) {
ส่งคืน parsefloat (y [s] ['text']) -parsefloat (x [s] ['text'])
-
Reve = 0
} อื่น {
arrs.sort (ฟังก์ชั่น (x, y) {
ส่งคืน parsefloat (x [s] ['text']) -parsefloat (y [s] ['text']) //
-
Reve = 1
-
// ใส่เนื้อหา html rowed ในรูปแบบ
สำหรับ (r = 0; r <right_len; r ++) {
สำหรับ (c = 0; c <cel_len; c ++) {
table.rows [r] .cells [c] .innerhtml = arrs [r] [c] ['html']]]
-
-
-
// การจัดเรียงตารางสิ้นสุดลง