Функции, которые работают с другими функциями, либо принимая их в качестве аргументов, либо возвращая их, называются функциями высшего порядка.
Функции высшего порядка позволяют нам абстрагироваться от действий, а не только от значений.
Давайте сначала посмотрим карту :
Задание: добавьте 2 к каждому элементу массива.
// Define an array. var testArray = [1, 2, 3, 4, 5, 6, 7];
мы пишем функцию для нашей логики, которая будет добавлять 2 к аргументу функции.
var logic = function (o) {
return o += 2;
}
// adding 2 to argument.
мы пишем карту функций, которая принимает два аргумента, первый — это массив, а второй — функциональный тест (принимает тест в качестве аргумента для карты).
тест будет содержать логическую часть нашей задачи. Мы также определяем массив, в который мы будем помещать наш результат и возвращать его как окончательный вывод карты.
function map (array, test) {
// Array - It will abstract testArray
// test - It will abstract logic.
var data = [];
return data;
}
Теперь нам нужно перебрать массив и изменить его в соответствии с тестовой функцией, которая выглядит следующим образом:
function map (array, test) {
var data = [];
var i;
for (i = 0; i < array.length; i += 1) {
data.push(test(array[i]));
}
return data;
}
Мы передаем каждый элемент массива в тестовую функцию, которая абстрагирует логику, добавляет 2 к элементу массива и, наконец, помещает тест в массив данных.
так как результаты
console.log(map(testArray, logic)); // [3, 4, 5, 6, 7, 8, 9]
Точно так же мы можем написать:
Фильтр:
function filter (array, test) {
var data = [];
var i;
for (i = 0; i < array.length; i += 1) {
if (test(array[i])) data.push(array[i]);
}
return data;
}
var testArray = [1, 2, 3, 4, 5, 6, 7];
console.log(filter(testArray, function (o){
return o > 3;
}));
Уменьшить:
В уменьшении нам также нужен третий аргумент, который определяет начальное значение для нашей функции объединения.
function reduce (array, combine, start) {
var current = start;
for (var i = 0; i < array.length; i++)
current = combine(current, array[i]);
return current;
}
var testArray = [1, 2, 3, 4, 5]
console.log(reduce(testArray, function(a,b){
return a+b
}, 0))
Если вы хотите написать вышеуказанную функцию для коллекций, вы можете передать третий аргумент как массив или объект и сохранить в нем свой результат.
Ссылки:
- "Карта"
- "Уменьшать"
- "Фильтр"