Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

دالة Sort

جزء من قسم Logic & Flow في رحلة JavaScript على Coddy — الدرس 57 من 65.

تسمح طريقة sort() بفرز عناصر المصفوفة في مكانها وتعيد المصفوفة المفروزة. بشكل افتراضي، تقوم بفرز العناصر كسلاسل نصية بترتيب أبجدي وتصاعدي.

إليك الصيغة الأساسية:

array.sort([compareFunction])

مثال بدون استخدام دالة المقارنة (compare function):

const fruits = ['banana', 'apple', 'orange', 'mango'];
fruits.sort();
console.log(fruits);
// ['apple', 'banana', 'mango', 'orange']

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

const numbers = [1, 30, 4, 21, 100000];
numbers.sort();
console.log(numbers);
// [1, 100000, 21, 30, 4] (فرز رقمي غير صحيح)

لفرز الأرقام بشكل صحيح أو تنفيذ فرز مخصص، تحتاج إلى استخدام دالة مقارنة (compare function).

يجب أن تُرجع دالة المقارنة (compare function):

  • قيمة سالبة إذا كان a يجب أن يأتي قبل b
  • قيمة موجبة إذا كان b يجب أن يأتي قبل a
  • صفراً إذا كانا متساويين

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

// ترتيب تصاعدي
const numbers = [1, 30, 4, 21, 100000];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 4, 21, 30, 100000]
// ترتيب تنازلي
numbers.sort((a, b) => b - a);
console.log(numbers); // [100000, 30, 21, 4, 1]

مثال آخر على كيفية فرز الكائنات:

const people = [
    { name: 'John', age: 30 },
    { name: 'Alice', age: 25 },
    { name: 'Bob', age: 35 }
];

// فرز حسب العمر (تصاعدياً)
people.sort((a, b) => a.age - b.age);
// فرز حسب الاسم (أبجدياً باستخدام localeCompare())
people.sort((a, b) => a.name.localeCompare(b.name));
challenge icon

التحدي

سهل

أنشئ دالة باسم sortByLength تأخذ مصفوفة من السلاسل النصية وتُعيد مصفوفة جديدة تحتوي على نفس السلاسل النصية مرتبة حسب طولها بترتيب تصاعدي. إذا كان لسلسلتين نفس الطول، فيجب ترتيبهما أبجدياً.

ورقة مرجعية

تقوم الطريقة sort() بفرز عناصر المصفوفة في مكانها وإرجاع المصفوفة المفروزة. بشكل افتراضي، تقوم بفرز العناصر كسلاسل نصية بترتيب أبجدي.

الصيغة الأساسية:

array.sort([compareFunction])

فرز السلاسل النصية:

const fruits = ['banana', 'apple', 'orange', 'mango'];
fruits.sort();
console.log(fruits); // ['apple', 'banana', 'mango', 'orange']

تحذير: لا يتم فرز الأرقام بشكل صحيح بدون دالة مقارنة:

const numbers = [1, 30, 4, 21, 100000];
numbers.sort();
console.log(numbers); // [1, 100000, 21, 30, 4] (غير صحيح)

ترجع دالة المقارنة:

  • قيمة سالبة إذا كان a يجب أن يأتي قبل b
  • قيمة موجبة إذا كان b يجب أن يأتي قبل a
  • صفر إذا كانا متساويين

فرز الأرقام بشكل صحيح:

// ترتيب تصاعدي
numbers.sort((a, b) => a - b);

// ترتيب تنازلي
numbers.sort((a, b) => b - a);

فرز الكائنات (Objects):

const people = [
    { name: 'John', age: 30 },
    { name: 'Alice', age: 25 },
    { name: 'Bob', age: 35 }
];

// فرز حسب العمر
people.sort((a, b) => a.age - b.age);

// فرز حسب الاسم أبجدياً
people.sort((a, b) => a.name.localeCompare(b.name));

جرّب بنفسك

function sortByLength(arr) {
    return arr.sort((a, b) => {
        // اكتب الكود هنا
    })
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow