Kodax

المصفوفات (Arrays) — JavaScript الأساسيات

المصفوفات (Arrays)

المصفوفات هي قوائم مرتبة من البيانات يمكنها تخزين أي نوع.

إنشاء المصفوفات

// طريقة الأقواس المربعة (الأفضل)
let fruits = ["تفاح", "موز", "برتقال"];

// مصفوفة فارغة
let empty = [];

// مصفوفة مختلطة
let mixed = [1, "نص", true, null, { name: "أحمد" }];

// باستخدام new Array
let numbers = new Array(1, 2, 3);
let sized = new Array(5); // مصفوفة بـ 5 عناصر فارغة

الوصول للعناصر

let colors = ["أحمر", "أخضر", "أزرق"];

console.log(colors[0]);    // أحمر (الأول)
console.log(colors[1]);    // أخضر
console.log(colors[2]);    // أزرق (الأخير)
console.log(colors[-1]);   // undefined (خطأ شائع)
console.log(colors.at(-1)); // أزرق (ES2022)
console.log(colors.length); // 3

// تعديل عنصر
colors[1] = "أصفر";
console.log(colors); // ["أحمر", "أصفر", "أزرق"]

دوال المصفوفات الأساسية

إضافة وحذف العناصر

let arr = [1, 2, 3];

// الإضافة
arr.push(4);        // [1, 2, 3, 4] - في النهاية
arr.unshift(0);     // [0, 1, 2, 3, 4] - في البداية

// الحذف
arr.pop();          // [0, 1, 2, 3] - من النهاية، يُرجع 4
arr.shift();        // [1, 2, 3] - من البداية، يُرجع 0

// splice - حذف/إضافة في أي موقع
arr.splice(1, 1);        // [1, 3] - حذف عنصر واحد من الموقع 1
arr.splice(1, 0, 2);     // [1, 2, 3] - إضافة 2 في الموقع 1
arr.splice(1, 1, 10, 20); // [1, 10, 20, 3] - استبدال

البحث

let fruits = ["تفاح", "موز", "برتقال", "موز"];

fruits.indexOf("موز");     // 1 (أول ظهور)
fruits.lastIndexOf("موز"); // 3 (آخر ظهور)
fruits.includes("تفاح");   // true
fruits.includes("عنب");    // false

// find - البحث بشرط
let numbers = [1, 5, 10, 15, 20];
let found = numbers.find(n => n > 8);
console.log(found); // 10

// findIndex - موقع العنصر
let index = numbers.findIndex(n => n > 8);
console.log(index); // 2

التحويل

let arr = [1, 2, 3];

// نسخ سطحية
let copy = arr.slice();
let partial = arr.slice(1, 2); // [2]

// الدمج
let arr2 = [4, 5];
let combined = arr.concat(arr2); // [1, 2, 3, 4, 5]

// Spread Operator (أفضل)
let combined2 = [...arr, ...arr2]; // [1, 2, 3, 4, 5]

// join - تحويل لنص
let text = arr.join("-"); // "1-2-3"

// split - نص لمصفوفة
let words = "مرحباً بالعالم".split(" "); // ["مرحباً", "بالعالم"]

دوال المصفوفات المتقدمة ⭐

forEach - التكرار

let fruits = ["تفاح", "موز", "برتقال"];

fruits.forEach((fruit, index) => {
  console.log(`${index + 1}. ${fruit}`);
});
// 1. تفاح
// 2. موز
// 3. برتقال

map - التحويل

let numbers = [1, 2, 3, 4, 5];
let doubled = numbers.map(n => n * 2);
console.log(doubled); // [2, 4, 6, 8, 10]

let names = ["أحمد", "محمد", "علي"];
let greetings = names.map(name => `مرحباً ${name}`);

filter - الفلترة

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

let evens = numbers.filter(n => n % 2 === 0);
console.log(evens); // [2, 4, 6, 8, 10]

let bigNumbers = numbers.filter(n => n > 5);
console.log(bigNumbers); // [6, 7, 8, 9, 10]

reduce - التجميع

let numbers = [1, 2, 3, 4, 5];

// المجموع
let sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 15

// أكبر عدد
let max = numbers.reduce((max, n) => n > max ? n : max, numbers[0]);

// تحويل لكائن
let fruits = ["تفاح", "موز", "تفاح", "برتقال", "موز", "موز"];
let count = fruits.reduce((obj, fruit) => {
  obj[fruit] = (obj[fruit] || 0) + 1;
  return obj;
}, {});
console.log(count); // { تفاح: 2, موز: 3, برتقال: 1 }

sort - الترتيب

let numbers = [3, 1, 4, 1, 5, 9, 2, 6];

// ترتيب تصاعدي
numbers.sort((a, b) => a - b);
console.log(numbers); // [1, 1, 2, 3, 4, 5, 6, 9]

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

// ترتيب النصوص
let names = ["علي", "أحمد", "محمد"];
names.sort(); // ترتيب أبجدي

السلسلة (Chaining)

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

let result = numbers
  .filter(n => n % 2 === 0)  // الأرقام الزوجية
  .map(n => n * 2)            // ضرب في 2
  .reduce((sum, n) => sum + n, 0); // المجموع

console.log(result); // 60 (4 + 8 + 12 + 16 + 20)
// إنشاء مصفوفة
let fruits = ["تفاح", "موز", "برتقال"];
console.log("الفواكه:", fruits);

// إضافة وحذف
fruits.push("عنب");
console.log("بعد الإضافة:", fruits);

// map - تحويل
let numbers = [1, 2, 3, 4, 5];
let squared = numbers.map(n => n ** 2);
console.log("المربعات:", squared);

// filter - فلترة
let evens = numbers.filter(n => n % 2 === 0);
console.log("الأزواج:", evens);

// reduce - تجميع
let sum = numbers.reduce((a, b) => a + b, 0);
console.log("المجموع:", sum);
اختبر فهمك