۹

متدهای پیشرفته آرایه 🥷

با Map, Filter و Reduce مثل یه نینجا با آرایه‌ها کار می‌کنیم!

`forEach()`: یه حلقه تمیز و شیک

`forEach` یه راه ساده‌تر برای چرخیدن روی اعضای یه آرایه‌ست. دیگه نیازی به `for` و شمارنده و این داستانا نیست. فقط بهش می‌گی "به ازای هر عضو، این کارو بکن".

const fruits = ['سیب', 'موز', 'گیلاس'];

fruits.forEach(function(fruit, index) {
  console.log(`میوه شماره ${index + 1}: ${fruit}`);
});

`map()`: تبدیل اعضای آرایه

`map` روی تک‌تک اعضای آرایه می‌چرخه، یه بلایی سرشون میاره و یه آرایه جدید با اعضای تغییرکرده بهمون برمی‌گردونه. آرایه اصلی دست‌نخورده باقی می‌مونه!

const numbers = [1, 2, 3, 4];
const doubledNumbers = numbers.map(function(num) {
  return num * 2;
});

console.log(doubledNumbers); // خروجی: [2, 4, 6, 8]
console.log(numbers);      // خروجی: [1, 2, 3, 4] (اصلی تغییر نکرده)

`filter()`: غربال کردن آرایه

`filter` هم یه آرایه جدید بهمون می‌ده، ولی فقط شامل اعضاییه که از فیلتر ما رد بشن (یعنی شرطمون براشون `true` باشه).

const numbers = [10, 25, 5, 40, 15];
const bigNumbers = numbers.filter(function(num) {
  return num > 20;
});

console.log(bigNumbers); // خروجی: [25, 40]

`reduce()`: جوش دادن همه اعضا به هم!

`reduce` کل اعضای آرایه رو می‌گیره و اون‌ها رو به یه مقدار واحد تبدیل می‌کنه. مثلاً برای جمع زدن همه اعداد یه آرایه عالیه.

const numbers = [1, 2, 3, 4, 5];
// accumulator: جمع‌کننده (نتیجه تا این لحظه)
// currentValue: مقدار فعلی
const sum = numbers.reduce(function(accumulator, currentValue) {
  return accumulator + currentValue;
}, 0); // 0 مقدار اولیه جمع‌کننده است

console.log(sum); // خروجی: 15

تمرین! 🧠

یه آرایه از آبجکت‌های محصولات داری. با استفاده از متدهای `filter` و `map`، یه آرایه جدید بساز که فقط شامل اسم محصولاتی باشه که قیمتشون بیشتر از ۵۰۰۰ تومنه.

جواب تمرین

const products = [
  { name: 'کتاب', price: 12000 },
  { name: 'خودکار', price: 3000 },
  { name: 'دفتر', price: 8000 },
  { name: 'مداد', price: 2500 }
];

const expensiveProductNames = products
  .filter(product => product.price > 5000) // اول فیلتر می‌کنیم
  .map(product => product.name);           // بعد اسم‌ها رو استخراج می‌کنیم

console.log(expensiveProductNames); // خروجی: ['کتاب', 'دفتر']