الوحدة 6 · الدرس 4 من 424/32 في الدورة~12 min
دروس الوحدة (4/4)
فرز
يحتوي فرز مصفوفة في JavaScript على مصيدة كبيرة: sort() يحول المصفوفة الأصلية
و ** يتم فرزها بشكل افتراضي كسلاسل **.
الفخ
JS
const nums = [10, 2, 1, 20];
nums.sort();
// [1, 10, 2, 20] ← !? sorted as strings: "1" < "10" < "2"للفرز الرقمي عليك تمرير المقارنة (a, b) => number:
a - b< 0 →aيأتي أولاًa - b> 0 →bيأتي أولاًa - b=== 0 → الطلب لم يتغير
JS
const nums = [10, 2, 1, 20];
nums.sort((a, b) => a - b);
// [1, 2, 10, 20] ← ascending order
nums.sort((a, b) => b - a);
// [20, 10, 2, 1] ← descendingفرز الكائنات حسب الحقل
JS
const utenti = [
{ nome: 'Anna', eta: 30 },
{ nome: 'Luca', eta: 12 },
{ nome: 'Sara', eta: 18 },
];
utenti.sort((a, b) => a.eta - b.eta);
// [{Luca,12}, {Sara,18}, {Anna,30}]بالنسبة للسلاسل، يمكنك مقارنتها بـ localeCompare:
JS
const nomi = ['Bruno', 'aurora', 'Carlo'];
nomi.sort((a, b) => a.localeCompare(b));
// ['aurora', 'Bruno', 'Carlo']عدم تحوير الأصل
خياران:
JS
// 1) copy + sort
const copia = [...nums].sort((a, b) => a - b);
// 2) toSorted (modern, ES2023)
const ordinati = nums.toSorted((a, b) => a - b);جربه
تمرين#js.m6.l4.e1
المحاولات: 0جارٍ التحميل…
تحديد `sortAscending(nums)`: إرجاع نسخة جديدة من المصفوفة، مرتبة بترتيب تصاعدي كأرقام. يجب ألا يتغير الأصل.
جارٍ تحميل المحرر…
إظهار التلميح
[...nums].sort((a, b) => a - b)
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
تمرين#js.m6.l4.e2
المحاولات: 0جارٍ التحميل…
حدد `sortByAgeAscending(people)`: بالنظر إلى مصفوفة من { name, age }، قم بإرجاع نسخة جديدة مرتبة حسب العمر تصاعديًا. يجب ألا يتغير الأصل.
جارٍ تحميل المحرر…
إظهار التلميح
[...people].sort((a, b) => a.age - b.age)
الحل متاح بعد 3 من المحاولات