JavaScript является функциональным языком программирования, потому что он принимает функции высшего порядка.
Прежде чем перейти к функциям высшего порядка. Мы можем узнать, как мы можем сделать наш код чистым, используя функции высшего порядка
а не обычные функции.
Допустим, мы хотим изменить все отрицательные числа в массиве на положительные и наоборот. Код, использующий обычные функции, был бы
как показано ниже:
const numbers = [1, 2, 3, 4, 5];
function changeSign(array) {
for (let index = 0; index < array.length; index++) {
console.log(array[index] * -1);
}
}
changeSign(numbers);
Если для решения той же задачи использовать функции высшего порядка, например forEach(), то он завершится строкой.
numbers.forEach((value)=>console.log(value*-1));
Функции высшего порядка — это функции, которые принимают функцию в качестве аргумента или возвращают функцию.
Мы можем увидеть некоторые функции высшего порядка в JavaScript:
- map()
- фильтр()
- reduce()
- forEach()
- каждый()
map()
- Метод map() просто сопоставляет заданную функцию с каждым значением в массиве и возвращает новый массив.
- Метод map() можно использовать, когда мы хотим перебрать все значения в массиве и изменить их при наступлении определенного условия.
- Скажем, мы хотим возвести в квадрат каждый элемент массива, мы можем сделать это, не заботясь об индексе массива и даже без цикла for.
let numbers=[1,2,3,4,5];
const squares=numbers.map(value=>value*value);
filter()
- Метод filter() создает новый массив из значений, удовлетворяющих условию, заданному внутри функции.
- Он отфильтровывает нужный элемент из массива и создает из него новый массив.
- Метод filter() пригодится, когда вы хотите исключить из массива ненужные элементы.
- Допустим, если мы хотим вернуть из массива четные элементы.
let numbers=[2,3,17,18,4,6];
const even=numbers.filter(value=>value%2==0); //returns 2,18,4,6
reduce()
- Метод reduce() уменьшает массив до одного элемента.
- В своей функции он принимает максимум четыре параметра.
previousValue, currentValue, currentIndex, array
- Метод reduce() можно легко понять, реализовав сумму всех значений в массиве.
let numbers = [1, 2, 3];
let initialValue=0;
let sum = numbers.reduce(function (previousValue, currentValue) {
return previousValue + currentValue;
},initialValue);
- Метод reduce начинается с начального значения 0, первоначально previousValue будет равно 0(initialValue), а currentValue будет первым элементом массива. Затем, currentValue будет прибавлено к previousValue и результат будет сохранен в previousValue. Этот процесс будет повторяться до конца массива, после чего предыдущее значение будет возвращено и сохранено в sum.
forEach()
- Метод forEach() выполняет заданную функцию по крайней мере один раз для каждого элемента.
- Обычно он используется для печати элементов массива. Но на этом использование forEach() не заканчивается. Поскольку его можно применить к каждому элементу массива. Мы даже можем использовать ее для изменения отдельных элементов в массиве.
let students = ['John', 'Sara', 'Jack'];
// using forEach
students.forEach((item, index, arr)=>{
// adding strings to the array elements
arr[index] = 'Hello ' + item;
});
//returns ["Hello John", "Hello Sara", "Hello Jack"]
every()
- Метод every() проверяет, все ли элементы в массиве удовлетворяют условию в заданной функции.
- Если условие удовлетворяет всем элементам массива, то метод вернет true, в противном случае он вернет false.
- Допустим, мы хотим проверить, все ли элементы больше 10 или заданного числа.
function isBigEnough(element, index, array) {
return element >= 10;
}
let numbers=[12, 5, 8, 130, 44];
numbers.every(isBig);
- Это не единственные функции высшего порядка в JavaScript. Изучение этих функций поможет вам писать более качественный код, а также вы будете хорошо разбираться в основах языка.