Привет! Мы считаем само собой разумеющимся, насколько хороши filter(), map() и reduce(). Но много лун назад (может быть, не так давно) людям приходилось писать свои собственные filter(), map() или reduce(). Я столкнулся с этой мыслью, когда задавался вопросом о временной сложности фильтра, чтобы удалить дубликаты в массиве. Filter() проходит по каждому элементу массива за временную сложность O(n). Когда мы напишем нашу собственную функцию фильтра, мы увидим это.

Фильтрация массива означает возврат каждого элемента массива, соответствующего заданному условию. В этом случае я собираюсь начать с массива чисел от 1 до 12.

В этом случае я фильтрую числа, делящиеся на 2. Возможно, вместо вашего обратного звонка у вас есть массив имен, и вы хотите отфильтровать имена, которые начинаются с определенной буквы. Вам нужно будет изменить возвращаемое значение в функции filterCallback. Наконец, я думаю, теперь очевидно, что функция Filter равна O(n), когда мы смотрим на эту функцию filterFunc. Все 12 элементов проверяются, чтобы увидеть, делятся ли они на 2. Те, которые делятся, добавляются в окончательный возвращаемый массив.

Map принимает элементы массива и возвращает массив, который выполняет одну и ту же операцию над каждым элементом. Другой случай O (n), поскольку операция выполняется над каждым элементом массива. Аналогичный код для фильтрации, за исключением того, что в нашей функции карты нет оператора if, потому что мы хотим, чтобы это происходило с каждым элементом массива.

Наконец, reduce принимает массив и возвращает один элемент. Наиболее популярным случаем будет получение суммы всех элементов массива.

Определенно очень весело смотреть на то, как и почему все работает, а не просто принимать как должное эти замечательные вещи, известные как filter(), map() и reduce().