Списки на базе строк Испытание курса: JS: Последовательности

Осторожно! Эта задача требует умения работать с массивами для понимания реализации функции l() (чтобы принять любое число аргументов). Если вы их не знаете, лучше вернуться к этой задаче после прохождения курса "JS: Коллекции".

Необходимо реализовать набор функций для работы со списками, построенными на базе строк. Данный вид списка представляет собой текст, где каждая строчка — это элемент списка, например:

hello
world

Это пример списка с двумя элементами hello и world.

Подразумевается, что интерфейс работы этой абстракции абсолютно точно такой же, как и тот, что использовался в курсе. Другими словами, можно безболезненно переписать реализацию тех функций, которые делались в курсе, и весь код, использующий списки, будет работать как ни в чем не бывало.

list.js

Реализуйте и экспортируйте следующие функции:

  • l(...items) — функция-конструктор. Уже реализована.
  • toString(list) — возвращает строковое представление списка
  • head(list) — возвращает первый элемент списка
  • tail(list) — возвращает "хвост" списка (все элементы, кроме первого)
  • isEmpty(list) — проверяет, является ли список пустым
  • cons(item, list) — добавляет элемент в начало списка и возвращает новый список
  • filter(predicate, list) — фильтрует список, используя предикат
  • map(callback, list) — преобразует список, используя callback-функцию
  • reduce(callback, init, list) — производит свертывание списка

Примеры:

const list = l('foo', 'bar', 'baz');

toString(list); // (foo, bar, baz)

const first = head(list); // 'foo'
const rest = tail(list); // l('bar', 'baz')

console.log(isEmpty(list)); //=> false
console.log(isEmpty(l()));  //=> true

const newList = cons('bas', list); // l('bas', 'foo', 'bar', 'baz')
const filteredList = filter(item => item[0] === 'b', list); // l('bar', 'baz')
const mappedList = map(item => item[0], list); // l('f', 'b', 'b')
const reducedList = reduce((item, acc) => acc ? `${acc},${item}` : item, '', list);
console.log(reducedList); //=> foo,bar,baz

Подсказки

  • Решение учителя на 100% функциональное

  • Длина строки str находится так: str.length

  • Чтобы получить подстроку из строки, используйте метод substr():

    'foo'.substr(1, 2); // 'oo';
    
  • Чтобы получить индекс, по которому находится отдельный символ в строке, используйте метод indexOf()

    'bar'.indexOf('a'); // 1;
    
Успешных завершений: 67%

Для полного доступа к испытанию нужна профессиональная подписка

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

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Последние код-ревью

Автор Дата обновления Версий
slavakaderkin 18 окт., 13:54 1
ramil10 08 окт., 13:03 1
alex_rdn 05 сент., 14:09 1
agmrv 18 авг., 05:40 1
temir-cs 01 авг., 12:05 2