Испытания

Списки на базе строк

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%

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

Автор Дата обновления Версий
masterflo 23 июня, 17:09 1
orionbetel 10 июня, 19:24 1
user-7b6231729081407b 27 мая, 01:27 1
dimlbc 07 мая, 18:26 1
maximvs286 08 апр., 17:10 2