JavaScript: Отображение, фильтрация, свёртка
В курсе JS: Функции мы проходили три основные функции высшего порядка по работе с коллекциями: map
, filter
и reduce
. С помощью них можно решать практически любые задачи.
solution.js
В этом испытании вам предстоит написать собственную реализацию этих функций, только работать они будут с файловыми деревьями.
map
принимает на вход функцию-обработчик и дерево, а возвращает отображенное дерево.
filter
принимает в качестве параметров предикат и дерево, а возвращает отфильтрованное дерево по предикату.
reduce
кроме основных параметров (функция-обработчик и дерево) принимает также начальное значение аккумулятора.
Все функции необходимо экспортировать.
Примеры
import { mkdir, mkfile, getName, isDirectory } from '@hexlet/immutable-fs-trees';
const tree = mkdir('/', [
mkdir('eTc', [
mkfile('config.json')
]),
]);
Приводим имена всех директорий и файлов к верхнему регистру:
map(n => ({ ...n, name: getName(n).toUpperCase() }), tree);
// {
// name: '/',
// type: 'directory',
// meta: {},
// children: [
// {
// name: 'ETC',
// type: 'directory',
// meta: {},
// children: [{ name: 'CONFIG.JSON', type: 'file', meta: {} }],
// },
// ],
// }
Отфильтровываем директории:
filter((n) => isDirectory(n), tree);
// {
// name: '/',
// type: 'directory',
// meta: {},
// children: [
// {
// name: 'etc',
// type: 'directory',
// meta: {},
// children: [],
// },
// ],
// }
Подсчитываем количество узлов в дереве:
reduce((acc, n) => acc + 1, tree, 0); // 3
Для полного доступа к испытанию нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.