Как написать функцию, которая склеивает строки через разделитель с использованием аргументов функции
Что проверяют
Знаете ли вы, как в JavaScript принять произвольное число аргументов и чем rest-параметры отличаются от старого arguments. Следом обычно меняют условие: поставить разделитель последним, пропустить пустые значения или обойтись без join.
Как отвечать
Базовое решение в одну строку:
const joinWith = (separator, ...parts) => parts.join(separator);
joinWith(", ", "a", "b", "c"); // "a, b, c"Дальше проговорите детали, ради которых задачу и дают:
- rest-параметр:
...partsсобирает оставшиеся аргументы в настоящий массив. Он может стоять только последним, поэтому разделитель идёт первым; arguments: псевдомассив без методов массива, его превращают в массив черезArray.from(arguments). У стрелочных функций своегоargumentsнет, в современном коде им не пользуются;- поведение
join: без аргумента разделитель это запятая, пустой массив даёт пустую строку,nullиundefinedстановятся пустыми строками, а объект превратится в[object Object]; - типы: в TypeScript сигнатура
(separator: string, ...parts: string[]) => stringотсекает числа и объекты ещё на компиляции; - пропуск пустых:
parts.filter(Boolean).join(separator), но скажите вслух, что так пропадёт и0. Точнее фильтровать поp !== "" && p != null.
Если попросят без join, покажите reduce с начальным значением или цикл, где разделитель добавляется перед каждым элементом, кроме первого.
Где спотыкаются
Используют arguments внутри стрелочной функции. На верхнем уровне модуля это ReferenceError, а внутри обычной функции стрелка молча возьмёт чужой arguments внешней функции.
Пишут reduce без начального значения. На пустом массиве он бросает TypeError, хотя функция должна вернуть пустую строку.
Склеивают циклом через += и получают лишний разделитель в конце, который потом срезают через slice. Работает, но выглядит как решение, подогнанное под тест.