Цель: создать функцию
myFilter(arr, callback)
, которая повторяет поведениеArray.prototype.filter
.
Напишите функцию myFilter
, которая принимает массив arr
и функцию обратного вызова callback
. Функция должна вернуть новый массив, содержащий только те элементы из arr
, для которых callback
вернул true
. Не используйте встроенный метод Array.prototype.filter
.
Эта задача помогает глубже понять работу методов высшего порядка в JavaScript, таких как filter
, map
и reduce
. Понимание их внутреннего устройства является ключевым для написания чистого, эффективного и функционального кода.
callback
. Если он возвращает true
, добавьте элемент в новый массив./**
* Функция myFilter, реализованная с использованием цикла for.
* @param {Array} arr - Входной массив.
* @param {Function} callback - Функция-предикат.
* @returns {Array} - Новый отфильтрованный массив.
*/
function myFilter(arr, callback) {
// 1. Создаем пустой массив для хранения результатов.
const filteredArray = [];
// 2. Запускаем цикл для перебора каждого элемента исходного массива.
for (let i = 0; i < arr.length; i++) {
// 3. Вызываем callback для текущего элемента `arr[i]`.
// Если он возвращает `true`, условие выполняется.
if (callback(arr[i], i, arr)) {
// 4. Добавляем элемент в наш новый массив.
filteredArray.push(arr[i]);
}
}
// 5. Возвращаем новый массив с отфильтрованными элементами.
return filteredArray;
}
Пошаговое объяснение кода:
function myFilter(arr, callback) { ... }
myFilter
, которая принимает два аргумента: arr
(массив для фильтрации) и callback
(функция, которая будет определять, включать ли элемент).const filteredArray = [];
filteredArray
. Здесь будут храниться элементы, которые пройдут проверку. Этот массив мы вернем в конце.for (let i = 0; i < arr.length; i++) { ... }
for
для перебора каждого элемента в исходном массиве arr
.let i = 0
: Начинаем с первого элемента (индекс 0).i < arr.length
: Цикл будет продолжаться, пока i
меньше общего количества элементов в массиве.i++
: После каждой итерации увеличиваем i
на 1, чтобы перейти к следующему элементу.if (callback(arr[i], i, arr)) { ... }
callback
.arr[i]
: Передаем в callback
текущий элемент.i
: Передаем его индекс.arr
: Передаем сам исходный массив.if (...)
: Если callback
возвращает true
, условие считается выполненным.filteredArray.push(arr[i]);
if
истинно, мы добавляем текущий элемент arr[i]
в наш массив filteredArray
.return filteredArray;
filteredArray
, который теперь содержит все отфильтрованные элементы.Почему так:
for
часто является самым быстрым способом обхода массива, так как он имеет минимальные накладные расходы.callback
Ваша реализация должна поддерживать стандартную сигнатуру callback
-функции для filter
: callback(element, index, array)
.
element
: Текущий обрабатываемый элемент в массиве.index
(необязательный): Индекс текущего элемента.array
(необязательный): Массив, по которому осуществляется проход.const numbers = [1, 2, 3, 4, 5];
const even = myFilter(numbers, (num) => num % 2 === 0);
// even должен быть [2, 4]
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const longWords = myFilter(words, (word) => word.length > 6);
// longWords должен быть ['exuberant', 'destruction', 'present']
myFilter
.Цель: создать функцию
myFilter(arr, callback)
, которая повторяет поведениеArray.prototype.filter
.
Напишите функцию myFilter
, которая принимает массив arr
и функцию обратного вызова callback
. Функция должна вернуть новый массив, содержащий только те элементы из arr
, для которых callback
вернул true
. Не используйте встроенный метод Array.prototype.filter
.
Эта задача помогает глубже понять работу методов высшего порядка в JavaScript, таких как filter
, map
и reduce
. Понимание их внутреннего устройства является ключевым для написания чистого, эффективного и функционального кода.
callback
. Если он возвращает true
, добавьте элемент в новый массив./**
* Функция myFilter, реализованная с использованием цикла for.
* @param {Array} arr - Входной массив.
* @param {Function} callback - Функция-предикат.
* @returns {Array} - Новый отфильтрованный массив.
*/
function myFilter(arr, callback) {
// 1. Создаем пустой массив для хранения результатов.
const filteredArray = [];
// 2. Запускаем цикл для перебора каждого элемента исходного массива.
for (let i = 0; i < arr.length; i++) {
// 3. Вызываем callback для текущего элемента `arr[i]`.
// Если он возвращает `true`, условие выполняется.
if (callback(arr[i], i, arr)) {
// 4. Добавляем элемент в наш новый массив.
filteredArray.push(arr[i]);
}
}
// 5. Возвращаем новый массив с отфильтрованными элементами.
return filteredArray;
}
Пошаговое объяснение кода:
function myFilter(arr, callback) { ... }
myFilter
, которая принимает два аргумента: arr
(массив для фильтрации) и callback
(функция, которая будет определять, включать ли элемент).const filteredArray = [];
filteredArray
. Здесь будут храниться элементы, которые пройдут проверку. Этот массив мы вернем в конце.for (let i = 0; i < arr.length; i++) { ... }
for
для перебора каждого элемента в исходном массиве arr
.let i = 0
: Начинаем с первого элемента (индекс 0).i < arr.length
: Цикл будет продолжаться, пока i
меньше общего количества элементов в массиве.i++
: После каждой итерации увеличиваем i
на 1, чтобы перейти к следующему элементу.if (callback(arr[i], i, arr)) { ... }
callback
.arr[i]
: Передаем в callback
текущий элемент.i
: Передаем его индекс.arr
: Передаем сам исходный массив.if (...)
: Если callback
возвращает true
, условие считается выполненным.filteredArray.push(arr[i]);
if
истинно, мы добавляем текущий элемент arr[i]
в наш массив filteredArray
.return filteredArray;
filteredArray
, который теперь содержит все отфильтрованные элементы.Почему так:
for
часто является самым быстрым способом обхода массива, так как он имеет минимальные накладные расходы.callback
Ваша реализация должна поддерживать стандартную сигнатуру callback
-функции для filter
: callback(element, index, array)
.
element
: Текущий обрабатываемый элемент в массиве.index
(необязательный): Индекс текущего элемента.array
(необязательный): Массив, по которому осуществляется проход.const numbers = [1, 2, 3, 4, 5];
const even = myFilter(numbers, (num) => num % 2 === 0);
// even должен быть [2, 4]
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const longWords = myFilter(words, (word) => word.length > 6);
// longWords должен быть ['exuberant', 'destruction', 'present']
myFilter
.Редактор кода намеренно скрыт на мобильном.
Поверь, так лучше: я оберегаю тебя от искушения писать код в неидеальных условиях. Маленький экран и виртуальная клавиатура — не лучшие помощники для программиста.
📖 Сейчас: Изучи задачу, продумай решение. Действуй как стратег.
💻 Потом: Сядь за компьютер, открой сайт и реализуй все идеи с комфортом. Действуй как код-джедай!