Функции, которые работают с другими функциями, либо принимая их в качестве аргументов, либо возвращая их, называются функциями высшего порядка.

Функции высшего порядка позволяют нам абстрагироваться от действий, а не только от значений.

Давайте сначала посмотрим карту :

Задание: добавьте 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))

Если вы хотите написать вышеуказанную функцию для коллекций, вы можете передать третий аргумент как массив или объект и сохранить в нем свой результат.

Ссылки:

  • "Карта"
  • "Уменьшать"
  • "Фильтр"