В экосистеме Vega и Vega-Lite работа со строками строится на основе выражений (expression language), унаследованных от JavaScript-подобного синтаксиса, но ограниченных безопасным и предсказуемым набором функций. Строковые функции применяются в сигналах (signals), вычисляемых полях (calculate transforms), фильтрации данных и формировании динамических подписей визуализаций.
Строковые операции в Vega реализуются не через стандартные методы JavaScript, а через встроенный набор функций expression language. Все функции работают в контексте чистых выражений без побочных эффектов, что позволяет безопасно вычислять значения прямо в спецификации визуализации.
Строки в выражениях:
Ключевая особенность — единый синтаксис для всех преобразований данных, включая строки, числа и массивы.
Одними из наиболее часто используемых строковых функций являются функции изменения регистра.
toUpperCase() и toLowerCase()
Используются для нормализации текстовых данных:
toUpperCase(str) — перевод строки в верхний
регистрtoLowerCase(str) — перевод строки в нижний регистрПример логики выражения:
В выражениях Vega:
toUpperCase(datum.category)toLowerCase(signal:query)Эти функции часто применяются перед агрегацией данных, чтобы избежать расхождений в строковых ключах.
Работа с частями строк реализуется через функцию:
substring(str, start, end)
Поведение:
start — индекс начала (включительно)end — индекс конца (не включительно)Если end не задан, подстрока берётся до конца
строки.
Использование:
Пример:
substring(datum.code, 0, 3)substring(datum.timestamp, 0, 10)Функция строго индексная, без поддержки отрицательных значений (в отличие от JavaScript slice).
Для анализа текстовых данных используются функции поиска:
indexof(str, substring)
Возвращает:
-1, если совпадение отсутствует.Применение:
Пример:
indexof(datum.label, "error") >= 0Функция часто используется в сочетании с логическими выражениями для построения сложных условий фильтрации.
replace(str, pattern, replacement)
Позволяет выполнять замену фрагментов строк.
Особенности:
Примеры использования:
Пример выражения:
replace(datum.name, /_/g, " ")Эта функция часто применяется перед визуализацией категориальных подписей.
Разделяет строку на массив подстрок.
Используется для:
Пример:
split(datum.tags, ",")Объединяет массив строк в одну строку.
Пример:
join(datum.categories, " / ")Эти функции особенно важны при работе с агрегированными данными в Vega-Lite, где трансформации часто приводят к массивам значений.
trim(str)
Удаляет пробелы в начале и конце строки.
Применение:
Пример:
trim(datum.label)В сочетании с lower/upper case используется как базовый шаг подготовки данных.
length(str)
Возвращает количество символов.
Использование:
Пример:
length(datum.comment) > 10Функция работает с Unicode-строками, но поведение может отличаться в зависимости от кодовых точек.
Строковая интерполяция в Vega реализуется через оператор сложения:
"text " + datum.valueЭто базовый механизм построения динамических подписей.
Использование:
Пример:
"Value: " + datum.countДля сложного форматирования часто комбинируется с функциями преобразования чисел.
В Vega и Vega-Lite строковые функции наиболее часто применяются внутри transform типа calculate.
Структура:
Пример логики:
Типичный сценарий:
calculate: "toLowerCase(datum.city)"или комбинированные выражения:
"trim(toUpperCase(datum.name))"Функции строк активно используются в transform filter.
Примеры логики:
поиск подстроки:
indexof(datum.text, "warning") > -1проверка префикса через substring:
substring(datum.code, 0, 2) === "US"комбинированная нормализация:
toLowerCase(trim(datum.label)) === "active"Фильтрация на строках часто служит основой интерактивных визуализаций.
Строковые функции могут вкладываться друг в друга, образуя цепочки преобразований:
trim(toLowerCase(replace(datum.name, /-/g, " ")))Такие конструкции применяются для:
Строковая система выражений в Vega имеет ряд ограничений:
Эти ограничения обеспечивают предсказуемость вычислений в декларативной системе визуализации.
В сигналах строковые функции используются для динамического управления интерфейсом визуализации.
Примеры сценариев:
Пример выражения сигнала:
signal: "toUpperCase(userInput)"или комбинированно:
"Selected: " + datum.categoryСигналы позволяют обновлять строковые значения в реальном времени без пересборки всей визуализации.
Строковые функции часто участвуют в формировании текстов осей и легенд.
Примеры:
Типичный паттерн:
"Category: " + toUpperCase(datum.key)или
substring(datum.label, 0, 15) + "..."Такие преобразования позволяют управлять читаемостью визуальных компонентов без изменения исходных данных.