06 Модуль -- 03 Перебирающие методы массива Flashcards
Методы массивов синтаксис
массив array, вызов метода method и callback-функция callback в качестве аргумента метода.
Аргументами callback-функции являются
значение элемента element (первый параметр), позиция элемента index (второй параметр) и сам исходный массив array (третий параметр).
Все параметры кроме значения элемента element необязательны.
Array.prototype.forEach()
методов который ничего не возвращает, а просто перебирает коллекцию. Используется как замена цикла for и for of.
Прервать инструкцией break нельзя.
Пример Array.prototype.forEach()
// Функциональный forEach numbers.forEach(num => console.log(num));
// Указываем параметр idx если нужен доступ к счетчику numbers.forEach((num, idx) => console.log(`index ${idx}, value ${num}`));
Array.prototype.map()
Поэлементно перебирает оригинальный массив. Возвращает новый массив такой же длины. И может что-то делать для каждого элемента.
Пример Array.prototype.map()
const numbers = [1, 2, 3];
const doubledNumbers = numbers.map(num => num * 2); console.log(doubledNumbers); // [2, 4, 6]
Array.prototype.filter()
Поэлементно перебирает оригинальный массив. Возвращает новый массив. Добавляет элементы в новый массив, только которые удовлетворяют условию, то есть возвращают true. Не мутирует иcходный массив. Если ничего не найдено, вернет пустой массив.
Используется когда необходимо найти более одного элемента в коллекции.
Пример Array.prototype.filter()
const numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console. log(numbers.filter(num => num > 5)); // [6, 7, 8, 9]
console. log(numbers.filter(num => num < 5)); // [0, 1, 2, 3, 4]
console. log(numbers.filter(num => num === 5)); // [5]
Array.prototype.find()
Поэлементно перебирает оригинальный массив. Возвращает первый элемент удовлетворяющий условию, если не найдет вернет undefined.
Пример Array.prototype.find()
const numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console. log(numbers.find(num => num > 5)); // 6
console. log(numbers.find(num => num < 5)); // 0
console. log(numbers.find(num => num === 5)); // 5
Array.prototype.every()
Поэлементно перебирает оригинальный массив. Возвращает true если ВСЕ элементы массива удовлетворяют условию.
Array.prototype.some()
Поэлементно перебирает оригинальный массив. Возвращает true если хотя-бы один элемент массива удовлетворяет условию.
Пример Array.prototype.every()
const fruits = [ { name: 'apples', amount: 100 }, { name: 'bananas', amount: 0 }, { name: 'grapes', amount: 50 }, ];
// every вернет true только если всех фруктов будет больше чем 0 штук const allAvailable = fruits.every(fruit => fruit.amount > 0); // false
Пример Array.prototype.some()
const fruits = [ { name: 'apples', amount: 100 }, { name: 'bananas', amount: 0 }, { name: 'grapes', amount: 50 }, ];
// some вернет true если хотябы одного фрукта будет больше чем 0 штук const anyAvailable = fruits.some(fruit => fruit.amount > 0); // true
Array.prototype.reduce()
Поэлементно перебирает оригинальный массив. Обычно используется для подсчета суммы значений массива(totalSalary), используется тоже для статистики.
Как работает Array.prototype.reduce() ?
- Функция reduce создаст новую переменную, называемую аккумулятор. Затем присвоит аккумулятору значение текущего (первого) элемента массива currentItem.
- Функция проверит есть ли у массива следующий элемент и если он есть, то добавит значение к аккумулятору. Когда следующего элемента не окажется (конец массива), функция вернет значения аккумулятора.
- Вторым аргументом reduce может быть начальное значение initialValue. Это значение будет присвоено аккумулятору до применения callback-функции к первому элементу массива.
Array.prototype.sort()
Изменяет оригинальный массив. По умолчанию метод sort сортирует, преобразуя элементы к строке.
Функция Array.prototype.sort()
((a, b) => a - b); // For ascending sort (от 1 до 10)
(a, b) => b - a); // For descending sort (от 10 до 1
Пример Chaining - Цепочки методов массива
const numbers = [1, 2, 3, 4, 5, 6, 7, 8];
/*
- Фильтруем четные числа. Далее, на результате метода filter,
- вызываем map и множим на 2. После чего на результате
- метода map вызываем reverse.
- /
const result = numbers
.filter(x => x % 2 === 0)
.map(y => y * 2)
.reverse();
console.log(result);
Что за проблема есть в этом коде? const numbers = [1, 2, 3, 4, 5, 6, 7, 8];
const even = numbers.filter(x => x % 2 === 0);
const doubled = even.map(x => x * 2);
const reversed = doubled.reverse();
console.log(reversed);
Проблема в том, что у нас появляются промежуточные переменные после каждой операции.
Chaining - Цепочки методов массива
Каждый следующий метод будет выполняться на результате работы предыдущего. Нужен для того чтобы можно было избавляться от промежуточных переменных.