JavaScript: Отображение, фильтрация, свёртка

Обновлено: 14 сент., 12:06
407
Студентов
71%
Завершения

В курсе 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

Для полного доступа к испытанию нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов