Как соединить фиксированное количество строк через разделитель в JavaScript
Что проверяют
Вопрос простой, но интервьюер смотрит на детали: пустые значения, null и undefined, склейку в цикле. Следом часто просят написать то же без join или объяснить разницу между конкатенацией через + и шаблонными строками.
Как отвечать
Базовый ответ: Array.prototype.join(separator). Разделитель по умолчанию это запятая, пустой массив даёт пустую строку, отдельная проверка длины не нужна.
const joinParts = (sep, ...parts) => parts.join(sep);
joinParts(', ', city, street, house);Дальше покажите, что знаете поведение на краях:
nullиundefined:joinпревращает их в пустую строку, а не в"null". Поэтому['a', null, 'b'].join('-')дастa--bс двойным разделителем;- пустые значения: чтобы не плодить разделители, сначала фильтруйте:
parts.filter(Boolean).join(', '). Учтите, чтоfilter(Boolean)выбросит и0, если числа допустимы, условие нужно точнее; - фиксированное количество: если строк ровно три и все обязательны, шаблонная строка
${a}, ${b}, ${c}читается лучше массива. Ноundefinedона подставит текстом, поэтому для необязательных частей надёжнее массив с фильтром; - нестроковые элементы:
joinприводит всё к строке, объекты станут[object Object], вложенные массивы раскроются через запятую; - производительность: в современных движках
+=в цикле обычно не медленнееjoin, так что довод «join быстрее» устарел. Выбирайте по читаемости.
Если строки собираются для человека, упомяните Intl.ListFormat: он соберёт «яблоки, груши и сливы» по правилам языка.
Где спотыкаются
Пишут цикл с ручной склейкой, а потом отрезают последний разделитель через slice. Работает, но показывает незнание стандартного метода.
Забывают про null и пустые строки, и в адресе появляется «Москва, , дом 5».
Путают join массива с concat строки или вызывают join на arguments и NodeList, забыв, что это не массивы и без Array.from метода у них нет.