في الآونة الأخيرة ، تتمثل مشكلة فرز JS في أن فرز قاعدة البيانات يستهلك موارد للغاية. في العميل ، باستثناء JS ، فهو كما هو الحال. جوهر جوهر بعد اختباري ، فإن نوع MS Build -in sort هو فعال للغاية
نعلم أن وظيفة الفرز يتم توفيرها بشكل افتراضي في JS ، ولكن يتم ترتيب هذه الوظيفة وفقًا لرموز ASCII لمحتوى الصفيف. هناك وظيفة multi_sort في PHP لتسميتها ، ولكن يبدو أنه لا توجد وظيفة من هذا القبيل في JS ، لكنها لا تهم ، لأن وظيفة الفرز لـ JS توفر أيضًا معلمات يمكنها تحديد وظيفة المقارنة للمصفوفتين الأبعاد.
1. فرز القيمة العددية
على افتراض الصفيف التالي
نسخ رمز رمز على النحو التالي:
var arr = [[1 ، 2 ، 3] ، [7 ، 2 ، 3] ، [3 ، 2 ، 3]] ؛
ماذا نفعل إذا أردنا فرز العمود الأول من كل فرع؟
نسخ رمز رمز على النحو التالي:
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. نظام التشغيل بشكل افتراضي على سبيل المثال ، لا يتسق عدد Unicode بحتة مع حرفين مع العديد من اللغات.
على سبيل المثال
نسخ رمز رمز على النحو التالي:
var arr = [['Middle' ، 'Country'] ، ['ah' ، ''] ، ['OH' ، '' ، '] ؛
arr.sort (وظيفة (x ، y) {
إرجاع x [0] .localeCompare (y [0]) ؛
}) ؛
نتيجة لذلك ، سيتم فرزها في العمود الأول من الأحرف الصينية يتم فرز السلسلة ، بما في ذلك صف مختلط الصينيين والبريتيين. أما بالنسبة لترتيب الطلب ، فإن الطريقة هي نفسها ما ورد أعلاه ، ويتم تغيير الطريقة لإرجاع y [0] .localeCompare (x [0]) ؛
وبهذه الطريقة ، تتحقق مشكلة الفرز ، ولا يزال هناك العديد من الأماكن للمصفوفات ثنائية الأبعاد 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 == 'no baidu snapshot' || text == 'no data tranking') {
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 الحكم يتم فرزه حاليًا أو ميزة ؛
إذا (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 المتجول في النموذج
لـ (r = 0 ؛ r <right_len ؛ r ++) {
لـ (c = 0 ؛ c <cel_len ؛ c ++) {
table.rows [r] .cells [c] .innerhtml = arrs [r] [c] ['html']]
}
}
}
// نهايات فرز الجدول