JS Intermediate

Полный набор методов массивов

Научиться использовать дополнительные методы массивов: find, findIndex, some, every, flat, flatMap, sort, Array.from, а также when to use each.

Кратко

Помимо map/filter/reduce, массивы имеют: find (первый подходящий), findIndex (его индекс), some/every (проверки), flat/flatMap (выравнивание), sort (сортировка), Array.from (создание). Все они не мутируют (кроме sort).


Подробно

Поиск и проверки: find(fn) — первый подходящий элемент или undefined findIndex(fn) — индекс первого подходящего или -1 some(fn) — хотя бы один true → true every(fn) — все true → true includes(value) — содержит ли элемент

Преобразование: flat(depth) — выравнивание вложенности flatMap(fn) — map + flat(1) Array.from(arrayLike) — создание массива из iterable/array-like

Сортировка (мутирует!): sort(fn) — сортирует на месте

Важно:

  • find → один элемент
  • filter → массив
  • sort мутирует исходный массив!
  • default sort — по строкам: [10, 9, 8] → [10, 8, 9]

Ментальная модель

Массив — как команда работников. find — найти первого подходящего. filter — оставить подходящих. sort — рассортировать. flat — выровнять иерархию.


Примеры

**Самый простой:**

javascript
const nums = [1, 2, 3, 4, 5];

console.log(nums.find(x => x > 3));     // 4
console.log(nums.findIndex(x => x > 3)); // 3
console.log(nums.some(x => x > 4));      // true
console.log(nums.every(x => x > 0));     // true

find/findIndex — поиск. some/every — проверки.

**Простой:**

javascript
const nested = [1, [2, 3], [4, [5, 6]]];
console.log(nested.flat());     // [1, 2, 3, 4, [5, 6]]
console.log(nested.flat(2));    // [1, 2, 3, 4, 5, 6]

const words = ['hello world', 'foo bar'];
console.log(words.flatMap(w => w.split(' ')));
// ['hello', 'world', 'foo', 'bar']

flat выравнивает. flatMap = map + flat.

**Реальный пример:**

javascript
// ⚠️ sort мутирует!
const arr = [3, 1, 4, 1, 5];
arr.sort((a, b) => a - b);
console.log(arr); // [1, 1, 3, 4, 5] — оригинальный изменён!

// БЕЗ мутации:
const sorted = [...arr].sort((a, b) => a - b);

// Array.from для создания из DOM NodeList:
const divs = document.querySelectorAll('div');
const divArray = Array.from(divs);
divArray.forEach(div => console.log(div.className));

sort мутирует! Для иммутабельности — [...arr].sort().


Частые ошибки

**Неправильно:** Забывать, что sort мутирует

**Почему:** arr.sort() изменяет arr! Это не создаёт новый массив.

**Правильно:** Для иммутабельности: [...arr].sort().

**Неправильно:** Использовать sort без компаратора для чисел

**Почему:** sort() по умолчанию сортирует как строки: [10, 9, 8] → [10, 8, 9].

**Правильно:** Для чисел: sort((a, b) => a - b).

**Неправильно:** Путать flat и flatMap

**Почему:** flat выравнивает вложенность. flatMap = map + flat(1).

**Правильно:** flat — выравнивание. flatMap — преобразование + выравнивание.


Важно запомнить

  • find → один элемент, findIndex → его индекс
  • some → хотя бы один, every → все
  • flat выравнивает, flatMap = map + flat
  • sort мутирует! Для иммутабельности — [...arr].sort()
  • Array.from создаёт массив из iterable/array-like

Связь

Назад: Вы знаете базовые методы массивов (J14-J15) — теперь у вас есть полный инструментарий.

Вперёд: Следующий урок (JI18) — Map и Set для коллекций «ключ-значение» и уникальных значений.

Материалы курса JS Intermediate — PROlab Academy.