عندما يتعلق الأمر بفرز الجدول ، فإن أول ما نحتاج إلى التحدث عنه هو فرز الصفيف ، لأن فرز الصفيف هو أساس فرز الجدول.
يوفر JavaScript طريقة Sort () للصفائف لفرز الجدول. بشكل افتراضي ، ستقوم هذه الطريقة بترتيب المصفوفات في الصفيف بترتيب رموز ASCII. يوفر JavaScript أيضًا طريقة عكسية الصفيف () للمصفوفات.
ألق نظرة على المثال:
نسخة الكود كما يلي:
وظيفة sortarray () {
var arraytest = ["Z" ، 5،2 ، "A" ، 32،3] ؛
arraytest.sort () ؛
تنبيه (arraytest.toString ()) ؛ // الإخراج: 2،3،32،5 ، a ، z
arraytest.reverse () ؛
تنبيه (arraytest.toString ()) ؛ // الإخراج: Z ، A ، 5،32،3،2
}
SortArray () ؛
هاها ، 5 أكبر من 32 ، من الواضح أن هذه ليست النتيجة التي نريدها. لقد قلت للتو أن طريقة SORT () يتم فرزها بترتيب رمز ASCII.
في الواقع ، تسمح طريقة SORT () أيضًا بأخذ معلمة من نوع الوظيفة ، والتي يمكننا تسميتها وظيفة مقارنة. عندما يمكن أن تتلقى وظيفة المقارنة معلمتين ، تقوم الوظيفة التالية بإرجاع معنى القيمة:
نسخة الكود كما يلي:
-1: المعلمة الأولى أصغر من المعلمة الثانية
0: المعلمة الأولى تساوي المعلمة الثانية
1: المعلمة الأولى أكبر من المعلمة الثانية
نسخة الكود كما يلي:
/**
* وظيفة المقارنة
* param {object} param1 param 1 للمقارنة
* param {object} param2 param 2 للمقارنة
* regurn {number} if param1> param2 إرجاع 1
* إذا كانت param1 == param2 إرجاع 0
* إذا كانت param1 <param2 إرجاع -1
*/
دالة comparefunc (param1 ، param2) {
// إذا كانت كلتا المعلمات نوع سلسلة
if (typeof param1 == "string" && typeof param2 == "string") {
إرجاع param1.localeCompare (param2) ؛
}
// إذا كانت المعلمة 1 عبارة عن رقم ، فإن المعلمة 2 هي سلسلة
if (typeof param1 == "number" && typeof param2 == "string") {
العودة -1 ؛
}
// إذا كانت المعلمة 1 عبارة عن سلسلة ، فإن المعلمة 2 هي رقم
if (typeof param1 == "string" && typeof param2 == "number") {
العودة 1 ؛
}
// إذا كانت كلتا المعلمتين أرقامًا
if (typeof param1 == "number" && typeof param2 == "number") {
if (param1> param2) return 1 ؛
if (param1 == param2) return 0 ؛
if (param1 <param2) return -1 ؛
}
}
عندما نقوم بتنفيذ arraytest.sort (comparefunc) نحصل على النتيجة الصحيحة.
في هذه المرحلة ، يتعين علينا شرح استخدام طريقة LocalEcompare () ، وهي طريقة لفرز السلاسل ، بمعلمة واحدة فقط ، وهي السلسلة المراد مقارنتها.
التفسير المحدد هو كما يلي:
1. إذا تم ترتيب كائن السلسلة أبجديًا قبل السلسلة في المعلمة ، فأرجع رقمًا سالبًا
2. إذا تم ترتيب كائن السلسلة في ترتيب الحرف بعد السلسلة في المعلمة ، فأرجع رقمًا موجبًا
3. إذا كان كائن السلسلة مساوياً للسلسلة في المعلمة ، فاحصل على 0.
بالإضافة إلى ذلك ، فإن طريقة LocalEcompare () لها ميزة فريدة أخرى. يمكن أن تنعكس هذه الميزة الفريدة في لغة توقيع الطريقة (في الموقع ، المحلي) ، أي أن تنفيذها يعتمد على الخصائص الإقليمية. إذا كان في النظام الإنجليزي ، فقد يكون تنفيذه في ترتيب تصاعدي للسلاسل ، وإذا كان تنفيذها في الصينية ، يعتمد تنفيذها على بينيين للحرف الأول.
هاها ، وهذا يعني أنه حتى لو شاركنا الأحرف الصينية في البرنامج ، فلن يحدث فرزنا خطأ.
الرجوع إلى البرنامج التالي:
نسخة الكود كما يلي:
var testarray = ["foot" ، "book" ، "ite" ، "home"] ؛
document.write (testarray.sort (
دالة comparefunction (param1 ، param2) {
إرجاع param1.localeCompare (param2) ؛ // الإخراج: 一 ، المنزل ، الكتاب ، القدم
}
) ؛