Higher Order Functions – Filter

✅ أولًا: ما هي filter؟

دالة filter:

  • هي دالة عليا (Higher-Order Function).
  • تُستخدم لتصفية (اختيار) العناصر من مصفوفة بناءً على شرط معين.
  • ترجع مصفوفة جديدة تحتوي فقط على العناصر التي تحقق الشرط.
  • لا تعدل المصفوفة الأصلية.
📦 الصيغة العامة:
const newArray = array.filter(function(element, index, array) {
  return condition; // ترجع true أو false
});
JavaScript

أو باستخدام دالة السهم:

const newArray = array.filter((element, index, array) => condition);
JavaScript

element: العنصر الحالي.

index: رقم الفهرس (اختياري).

array: المصفوفة الأصلية (اختياري).

🧠 مبدأ العمل:
  • تمر الدالة على كل عنصر في المصفوفة.
  • إذا كان الشرط true → يُضاف العنصر إلى المصفوفة الجديدة.
  • إذا كان false → يُستبعد العنصر.

📌 أمثلة شاملة (فقط على المصفوفات):

1. ✅ استخراج الأرقام الأكبر من 10
const numbers = [5, 12, 8, 20, 3];

const greaterThanTen = numbers.filter(num => num > 10);

console.log(greaterThanTen); // [12, 20]
JavaScript
🔍 التوضيح خطوة بخطوة:
  • تفحص filter كل رقم:
    • 5 > 10 ❌ → يُستبعد.
    • 12 > 10 ✅ → يُؤخذ.
    • 8 ❌
    • 20 ✅
    • 3 ❌
  • الناتج: [12, 20].
2. ✅ استخراج الأرقام الزوجية فقط
const numbers = [1, 2, 3, 4, 5, 6];

const even = numbers.filter(num => num % 2 === 0);

console.log(even); // [2, 4, 6]
JavaScript
3. ✅ استخراج الأعداد بين 10 و 50
const nums = [5, 15, 30, 55, 70];

const inRange = nums.filter(n => n >= 10 && n <= 50);

console.log(inRange); // [15, 30]
JavaScript

✅ تصفية الأعداد التي ليست مضاعفات للعدد 3

const arr = [3, 6, 8, 10, 15, 17];

const notDivisibleBy3 = arr.filter(num => num % 3 !== 0);

console.log(notDivisibleBy3); // [8, 10, 17]
JavaScript
5. ✅ استخراج الأعداد الفردية الأكبر من 20
const values = [10, 21, 33, 40, 55, 60];

const result = values.filter(val => val % 2 !== 0 && val > 20);

console.log(result); // [21, 33, 55]
JavaScript
✅ خصائص مهمة عن filter
الخاصيةالقيمة
تُرجع مصفوفة جديدة✅ نعم
تعدل الأصل؟❌ لا
كم عنصر في الناتج؟حسب الشروط
نوع العناصرنفس النوع الأصلي
⚠️ ملاحظات مهمة:
  1. يجب أن تُرجع الدالة الشرطية true أو false.
  2. filter لا توقف عند أول نتيجة، بل تمر على كل العناصر.
  3. الناتج قد يكون:
    • فارغًا [] (إذا لم يتحقق أي شرط).
    • مساويًا للمصفوفة الأصلية (إذا تحققت الشروط للجميع).
🧠 مثال تطبيقي مع شرط داخلي معقد
✅ استخراج الأعداد التي عدد أرقامها = 2 (أي بين 10 و99)
const values = [5, 12, 350, 45, 9, 100, 88];

const twoDigits = values.filter(num => num >= 10 && num <= 99);

console.log(twoDigits); // [12, 45, 88]
JavaScript

🧪 هل يمكن استخدام filter مع map؟ نعم!

const nums = [5, 10, 15, 20, 25];

const processed = nums
  .filter(n => n % 2 === 0)     // فقط الأعداد الزوجية
  .map(n => n * 2);             // اضربها ×2

console.log(processed); // [20, 40]
JavaScript
💬 خلاصة:
  • filter تستخدم لاختيار عناصر حسب شرط.
  • لا تغير الأصل.
  • تُرجع مصفوفة بنفس النوع.
  • مناسبة جدًا لتصفية الأرقام أو القيم التي تنطبق عليها قواعد معينة.