Склеивание ненулевых строк с разделителем в JavaScript

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы исключить элементы со значениями null или пустые строки, мы применяем метод Array.prototype.filter() и объединяем результат с желаемым разделителем используя метод Array.prototype.join():

JS
Скопировать код
const joinNonEmpty = (arr, delim) => arr.filter(Boolean).join(delim);

// Пример:
console.log(joinNonEmpty(['apple', '', 'orange', null, 'banana'], ', ')); // "apple, orange, banana"
Кинга Идем в IT: пошаговый план для смены профессии

Изучайте возможные варианты

Немного магии от lodash

Если у вас есть Lodash в вашем наборе инструментов разработчика, воспользуйтесь его эффективными функциями _.filter и _.join:

JS
Скопировать код
const _ = require('lodash');

const joinNonEmptyLodash = (arr, delim) => _.join(_.filter(arr, Boolean), delim);

// Пример:
console.log(joinNonEmptyLodash(['apple', '', null, 'banana'], ', ')); // "apple, banana"

Это решение подойдет для обеспечения совместимости со всеми браузерами, в том числе и со старыми версиями IE.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Создание универсального помощника

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

JS
Скопировать код
function joinIfPresent(delim, ...args) {
  return args.filter(item => item).join(delim);
}

// Пример использования:
console.log(joinIfPresent(', ', 'Street Name', '', 'City', null, 'Country')); // Street Name, City, Country

Такой подход работает более эффективно, устраняя необходимость использования Array.prototype.slice.call(arguments).

Применение опциональных условий

Тернарная операция обеспечивает краткую и лаконичную проверку условий:

JS
Скопировать код
const joinWithTernary = (arr, delim) => arr.filter(item => item ? true : false).join(delim);

// Прямо-таки нашли скрытые фрукты:
console.log(joinWithTernary(['apple', null, 'banana'], '; ')); // "apple; banana"

Готовимся к исключительным ситуациям

В стиле jQuery

Когда jQuery входит в ваш инструментарий, процесс итерации и фильтрации данных становится проще:

JS
Скопировать код
const joinNonEmptyJQuery = (arr, delim) => $.map(arr, item => item || null).join(delim);

// Пример:
$('#element').append(joinNonEmptyJQuery(['<div>apple</div>', '', '<div>banana</div>'], ''));

Отличаем null от пустой строки

Можно различать null и пустую строку, основываясь на их длине:

JS
Скопировать код
const joinWithoutFalsy = (arr, delim) => arr.filter(str => str && str.length > 0).join(delim);

// Увы, но не все найдено:
console.log(joinWithoutFalsy(['apple', undefined, 'banana'], ', ')); // "apple, banana"

Визуализация

Соберем все доступные ингредиенты, игнорируя отсутствующие:

Markdown
Скопировать код
Ингредиенты: 🍅, 🧄, 🍃, , 🧀

# Специальное блюдо от шефа: берем то, что у нас есть!

Подготовим рецепт с фирменной изюминкой:

Markdown
Скопировать код
Подадим на стол:

"🍅" + "🧄" + "🍃" + "" + "🧀" → "🍅 | 🧄 | 🧃 | 🧀"
// Результат отличается: Пустая банка не участвовала.

Строго типизированные данные: превращаем разнообразие в силу

Функция может работать с различными типами данных: числами, объектами и т.д, превращая их в единое строковое представление:

JS
Скопировать код
console.log(joinNonEmpty([42, null, { key: 'value' }, '', 'end'], ' – '));
// "42 – [object Object] – end" – 42 нашел свою дорогу, но преобразование ключа в значение утрачено

Структурирование кода подобно бутерброду

Структура кода важна,как хлеб для бутерброда — будьте внимательны. Например, при построении URL-адресов:

JS
Скопировать код
const urlParts = ['https://example.com', '', 'page', null];
console.log(joinNonEmpty(urlParts, '/')); // "https://example.com/page"

Объединение полей форм

Метод соединения умеет пропускать пустые поля, что позволяет удобно комбинировать данные, введенные пользователем:

JS
Скопировать код
const formData = {
  firstName: 'John',
  lastName: '',
  email: 'john.doe@example.com',
};
console.log(joinNonEmpty(Object.values(formData), ' ')); // "John john.doe@example.com"

Полезные материалы

  1. Array.prototype.join() – JavaScript | MDN — подробное изучение метода .join() на MDN.
  2. Array.prototype.filter() – JavaScript | MDN — описание процесса фильтрации массивов на MDN.
  3. Что такое оператор !! (не не) в JavaScript? – Stack Overflow — обсуждение использования !! для преобразования значений в булев тип на Stack Overflow.
  4. Array methods – JavaScript.Info — подробное руководство по различным методам массивов с примерами на JavaScript.Info.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод используется для фильтрации нулевых и пустых строк в массиве?
1 / 5
Свежие материалы