ترتيب المجموعاتJavaScript

sort() الطريقة هي واحدة من أكثر طرق القائمة قوة

ترتيب القائمة

sort() الطريقة ترتب القائمة حسب الترتيب الأبجدي للأعداد

مثال

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // ترتيب العناصر في fruits

تجربة بنفسك

عكس القائمة

reverse() يستخدم هذا الطريقة لتحويل عناصر القائمة.

يمكنك استخدامها لترتيب القيم في ترتيب تنازلي:

مثال

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();            // ترتيب العناصر في fruits
fruits.reverse();         // عكس ترتيب العناصر

تجربة بنفسك

ترتيب الأرقام

بالافتراض،sort() تقوم الدالة بترتيبالنصوصلترتيب القيم.

تعتبر هذه الدالة مناسبة للنصوص (سيتم وضع "Apple" قبل "Banana").

لكن، إذا تم ترتيب الأرقام كنصوص، فإن "25" أكبر من "100" لأن "2" أكبر من "1".

لذلك،sort() يؤدي هذا الطريقة إلى نتائج غير صحيحة عند ترتيب الأرقام.

نحن نستخدموظيفة القياسلإصلاح هذه المشكلة:

مثال

تعريف points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b}); 

تجربة بنفسك

استخدم نفس التقنية لترتيب القيم في ترتيب تنازلي:

مثال

تعريف points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a}); 

تجربة بنفسك

وظيفة القياس

يهدف وظيفة المقارنة إلى تعريف ترتيب آخر.

يجب أن تعود وظيفة المقارنة بـ قيمة سلبية، صفر أو إيجابية، اعتمادًا على المعاملات:

function(a, b){return a-b}

عند sort() عند مقارنة قيمتين بواسطة الدالة، سيتم إرسال القيم إلى وظيفة المقارنة، ثم سيتم ترتيب القيم بناءً على القيمة التي يعود بها (سلبية، صفر أو إيجابية).

مثال:

عند مقارنة 40 و 100،sort() ستدعو هذه الطريقة إلى وظيفة المقارنة function(40,100).

يحسب هذا الدالة 40-100، ثم يعود بـ -60 (قيمة سلبية).

وظيفة الترتيب ستقوم بترتيب 40 كأقل قيمة من 100.

يمكنك استخدام قطعة الكود التالية لاختبار الترتيب الرقمي والابجدي:

<button onclick="myFunction1()">ترتيب بالترتيب الأبجدي</button>
<button onclick="myFunction2()">ترتيب بالترتيب الرقمي</button>
<p id="demo"></p>
<script>
تعريف points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;
function myFunction1() {
		points.sort();
		document.getElementById("demo").innerHTML  = points;
}
function myFunction2() {
		points.sort(function(a, b){return a - b});
		document.getElementById("demo").innerHTML = points;
}
</script>

تجربة بنفسك

ترتيب المجموعة بترتيب عشوائي

مثال

تعريف points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()}); 

تجربة بنفسك

البحث عن أعلى (أو أقل) قيمة في مجموعة

JavaScript لا يقدم وظيفة مدمجة للبحث عن أكبر أو أصغر قيمة في مجموعة.

على الرغم من ذلك، بعد تصنيف المجموعة، يمكنك استخدام المؤشر للحصول على أعلى أو أقل قيمة.

ترتيب تصاعدي:

مثال

تعريف points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// الآن points[0] يحتوي على الأقل قيمة
// و points[points.length-1] يحتوي على الأعلى قيمة

تجربة بنفسك

ترتيب تنازلي:

مثال

تعريف points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// الآن points[0] يحتوي على الأعلى قيمة
// و points[points.length-1] يحتوي على الأقل قيمة

تجربة بنفسك

إذا كنت بحاجة فقط إلى العثور على أعلى أو أقل قيمة، فإن تصنيف المجموعة بأكملها هو طريقة غير فعالة جداً.

استخدام Math.max() على المجموعة

يمكنك استخدام Math.max.apply للعثور على الأعلى قيمة في المجموعة:

مثال

وظيفة myArrayMax(arr) {
    الرجوع إلى Math.max.apply(null, arr);
}

تجربة بنفسك

Math.max.apply([1, 2, 3]) يساوي Math.max(1, 2, 3).

استخدام Math.min() على المجموعة

يمكنك استخدام Math.min.apply للعثور على الأقل قيمة في المجموعة:

مثال

وظيفة myArrayMin(arr) {
    الرجوع إلى Math.min.apply(null, arr);
}

تجربة بنفسك

Math.min.apply([1, 2, 3]) يساوي Math.min(1, 2, 3).

طرق Min / Max JavaScript الخاصة بي

أسرع طريقة لحل المشكلة هي استخدام "الطريقة الذاتية".

هذه الوظيفة تتجول في المجموعة وتقارن كل قيمة بالأعلى قيمة التي وجدها:

مثال (البحث عن Max)

وظيفة myArrayMax(arr) {
    تعريف طول المجموعة = طول arr
    تعريف القيمة القصوى = -Infinity;
    while (len--) {
        إذا (قيمة arr[len] أكبر من القيمة القصوى) {
            القيمة القصوى = arr[len];
        }
    }
    الرجوع إلى max;
}

تجربة بنفسك

هذه الوظيفة تتجول في المجموعة وتقارن كل قيمة بالأقل قيمة التي وجدها:

مثال (البحث عن Min)

وظيفة myArrayMin(arr) {
    تعريف طول المجموعة = طول arr
    var min = Infinity;
    while (len--) {
        if (arr[len] < min) {
            min = arr[len];
        }
    }
    return min;
}

تجربة بنفسك

ترتيب مجموعات العناصر

غالبًا ما تحتوي مجموعات JavaScript على عناصر:

مثال

var cars = [
{type:"Volvo", year:2016},
{type:"Saab", year:2001},
{type:"BMW", year:2010}];

حتى لو كان لدي العناصر أنواع بيانات مختلفة من الخصائص،sort() يمكن استخدام الطريقة نفسها لترتيب المدخلات.

الحل هو استخدام دالة مقارنة لاستخدام مقارنة القيمة الخاصية:

مثال

cars.sort(function(a, b){return a.year - b.year});

تجربة بنفسك

سيكون تحديد خصائص النصوص أكثر تعقيدًا:

مثال

cars.sort(function(a, b){
	  var x = a.type.toLowerCase();
	  var y = b.type.toLowerCase();
	  if (x < y) {return -1;}
	  if (x > y) {return 1;}
	  return 0;
});

تجربة بنفسك