3. Итерационные методы (самые важные!)


forEach() - выполняет функцию для каждого элемента

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

numbers.forEach(function(number) {
  sum += number;
});

console.log(sum); // 15

numbers.forEach(function(item, index, array) {
  console.log(`Элемент ${item} имеет индекс ${index}`);
});

// С использованием стрелочной функции
numbers.forEach(number => console.log(number * 2));
// 2, 4, 6, 8, 10

map() - создает новый массив, преобразуя каждый элемент

let numbers = [1, 2, 3, 4, 5];
let doubled = numbers.map(function(number) {
  return number * 2;
});

console.log(doubled); // [2, 4, 6, 8, 10]

// Стрелочная функция
let squares = numbers.map(n => n * n);
console.log(squares); // [1, 4, 9, 16, 25]

filter() - создает новый массив с элементами, прошедшими проверку

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let evenNumbers = numbers.filter(function(number) {
  return number % 2 === 0;
});

console.log(evenNumbers); // [2, 4, 6, 8, 10]

// Фильтрация строк
let fruits = ["яблоко", "банан", "апельсин", "виноград", "груша"];
let longFruits = fruits.filter(fruit => fruit.length > 5);
console.log(longFruits); // ["банан", "апельсин", "виноград"]

find() - находит первый элемент, удовлетворяющий условию

let numbers = [1, 2, 3, 4, 5];
let found = numbers.find(function(number) {
  return number > 3;
});

console.log(found); // 4

// Поиск объекта в массиве
let users = [
  {id: 1, name: "Анна"},
  {id: 2, name: "Борис"},
  {id: 3, name: "Мария"}
];

let user = users.find(u => u.id === 2);
console.log(user); // {id: 2, name: "Борис"}

findIndex() - находит индекс первого элемента, удовлетворяющего условию

let numbers = [1, 2, 3, 4, 5];
let index = numbers.findIndex(n => n > 3);
console.log(index); // 3

some() - проверяет, удовлетворяет ли хотя бы один элемент условию

let numbers = [1, 2, 3, 4, 5];
let hasEven = numbers.some(n => n % 2 === 0);
console.log(hasEven); // true

let hasNegative = numbers.some(n => n < 0);
console.log(hasNegative); // false

every() - проверяет, удовлетворяют ли все элементы условию

let numbers = [1, 2, 3, 4, 5];
let allPositive = numbers.every(n => n > 0);
console.log(allPositive); // true

let allEven = numbers.every(n => n % 2 === 0);
console.log(allEven); // false

reduce() - применяет функцию к аккумулятору и каждому элементу

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

// Сумма всех элементов
let sum = numbers.reduce(function(accumulator, currentValue) {
  return accumulator + currentValue;
}, 0); // 0 - начальное значение аккумулятора

console.log(sum); // 15

// Максимальное значение
let max = numbers.reduce((acc, val) => Math.max(acc, val));
console.log(max); // 5

// Группировка по длине строк
let fruits = ["яблоко", "банан", "апельсин", "киви", "груша"];
let grouped = fruits.reduce((acc, fruit) => {
  let length = fruit.length;
  if (!acc[length]) {
    acc[length] = [];
  }
  acc[length].push(fruit);
  return acc;
}, {});

console.log(grouped);
// { '4': ['киви'], '5': ['банан', 'груша'], '6': ['яблоко'], '8': ['апельсин'] }