TGViewer
📝 Рассказ фронтендера 📝 Рассказ фронтендера @frontend_tales · 1.81K subscribers
Post #423 884
📝 Форматируем списки

Intl.ListFormat - это встроенный JavaScript API для форматирования списков на естественном языке. Вместо ручной склейки строк через запятые и союзы, он делает это автоматически, учитывая правила конкретного языка.

Основной синтаксис:
new Intl.ListFormat(locale, options)


options принимает два ключевых параметра:

🟠type — тип списка: "conjunction" (и), "disjunction" (или), "unit" (просто перечисление)
🟠style — стиль: "long", "short", "narrow"

Примеры:

const items = ['Яблоко', 'Банан', 'Вишня'];

// Союз «и» (conjunction) — по умолчанию
const conjRu = new Intl.ListFormat('ru', { type: 'conjunction' });
conjRu.format(items);
// → "Яблоко, Банан и Вишня"

// Союз «или» (disjunction)
const disjRu = new Intl.ListFormat('ru', { type: 'disjunction' });
disjRu.format(items);
// → "Яблоко, Банан или Вишня"

// Простое перечисление (unit)
const unitRu = new Intl.ListFormat('ru', { type: 'unit', style: 'narrow' });
unitRu.format(items);
// → "Яблоко Банан Вишня"

// Английский для сравнения
const conjEn = new Intl.ListFormat('en', { type: 'conjunction' });
conjEn.format(['Apple', 'Banana', 'Cherry']);
// → "Apple, Banana, and Cherry"


Метод formatToParts - возвращает массив объектов, если нужен контроль над каждой частью:

const fmt = new Intl.ListFormat('ru', { type: 'conjunction' });
fmt.formatToParts(['Кот', 'Пёс', 'Хомяк']);
// → [
// { type: 'element', value: 'Кот' },
// { type: 'literal', value: ', ' },
// { type: 'element', value: 'Пёс' },
// { type: 'literal', value: ' и ' },
// { type: 'element', value: 'Хомяк' }
// ]


Это удобно, например, когда нужно обернуть каждый элемент в <span> с отдельным стилем.


🔵Практический кейс - вывод имён авторов:

function formatAuthors(authors, locale = 'ru') {
if (authors.length === 0) return 'Автор неизвестен';
return new Intl.ListFormat(locale, {
style: 'long',
type: 'conjunction',
}).format(authors);
}

formatAuthors(['Толстой', 'Достоевский']);
// → "Толстой и Достоевский"

formatAuthors(['Толстой', 'Достоевский', 'Чехов']);
// → "Толстой, Достоевский и Чехов"


@frontend_tales
  • 🔥 18
  • 👍 4
  • ❤ 3
More from @frontend_tales
  1. May 29, 2026Ну с выходом opus 4.8, точно нет 🥵
  2. May 27, 2026Уууу валит
  3. May 27, 2026♊️Gemini CLI и Subagents На примере простого проекта с нуля разберем, как настроить и связ…
  4. May 25, 2026🌐 Превращаем любой сайт в приложение с помощью Pake. Из интересного: тут не используются…
  5. May 24, 2026Опять тут вышла самая умная. лучшая модель - Qwen 3.7-Max. И результаты тестов интересные…
  6. May 23, 2026Когда ты null null, а хотел быть [object Object] 🥲
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →