Кнопка «Нравится» под постом VK меняет вид от четырёх условий: лайк поставлен, идёт запрос, тёмная тема, кнопка в компактной ленте. Склейка через + и тернарники давно нечитаема.
Напишите cx(...args). Аргумент-строка добавляется как есть, если не пустая. Число добавляется, если не 0. Объект добавляет свои ключи, у которых значение истинно. Массив разбирается так же, с любой вложенностью. null, undefined, false, 0, '' пропускаются.
Классы идут через один пробел в порядке появления, повторы убираются: остаётся первое вхождение.
В работе: Кнопки под постом: 4 состояния, 9 классов, одна строка на каждом рендере ленты.
Пример 1: строки и объект
"like", {"like--active": true, "like--loading": false}, "btn""like like--active btn"
Пример 2: ложные значения
null, false, 0, "", "like", null
"like"
cx — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 7: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function cx(...args) // → string
Источник: на задачах VK: кнопки под постом в ленте. Условие пересказано своими словами.
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.