Цель: создать функцию
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.Редактор кода намеренно скрыт на мобильном.
Поверь, так лучше: я оберегаю тебя от искушения писать код в неидеальных условиях. Маленький экран и виртуальная клавиатура — не лучшие помощники для программиста.
📖 Сейчас: Изучи задачу, продумай решение. Действуй как стратег.
💻 Потом: Сядь за компьютер, открой сайт и реализуй все идеи с комфортом. Действуй как код-джедай!