length —
базовое свойство размера данныхВ экосистеме Vega и Vega-Lite работа с данными часто опирается на
JavaScript-выражения внутри трансформаций (transform),
вычисляемых полей (calculate) и сигналов
(signal). Одним из наиболее часто используемых свойств
является length, применяемое к массивам и строкам.
В контексте данных Vega:
data.values)lookup, filter,
windowиспользуют .length для определения размера
структуры.
{
"data": {
"values": [10, 20, 30, 40]
},
"transform": [
{
"calculate": "datum.values.length",
"as": "count"
}
]
}
Здесь length возвращает количество элементов массива,
что особенно важно при динамической визуализации:
datum.category.length
Используется для:
indexOf —
поиск позиции элемента или подстрокиМетод indexOf применяется как к строкам, так и к
массивам и возвращает индекс первого вхождения элемента или подстроки. В
Vega-Lite и Vega это часто используется в выражениях фильтрации и
условной логики.
datum.label.indexOf("sales")
Возвращает:
-1, если подстрока отсутствуетВ Vega-Lite это используется для фильтрации:
{
"transform": [
{
"filter": "datum.label.indexOf('A') >= 0"
}
]
}
Такой фильтр оставляет только записи, где в label
присутствует символ или слово "A".
[1, 2, 3, 4].indexOf(3)
Возвращает 2, поскольку элемент 3 находится
на второй позиции (индексация с нуля).
В визуализациях это полезно для:
{
"transform": [
{
"calculate": "[\"A\", \"B\", \"C\"].indexOf(datum.group) >= 0",
"as": "isAllowed"
}
]
}
slice —
извлечение части строки или массиваМетод slice используется для получения подмножества
данных без изменения исходного массива или строки. В Vega и Vega-Lite он
особенно важен при подготовке отображаемых значений.
datum.label.slice(0, 5)
Возвращает первые 5 символов строки.
Используется для:
{
"transform": [
{
"calculate": "datum.label.slice(0, 10)",
"as": "shortLabel"
}
]
}
[10, 20, 30, 40, 50].slice(1, 4)
Результат: [20, 30, 40]
В Vega-Lite это применяется для:
{
"transform": [
{
"calculate": "datum.values.slice(0, 3)",
"as": "topValues"
}
]
}
length, indexOf, slice в
выражениях VegaВ Vega Expression Language эти методы часто используются совместно для построения логики визуализации.
datum.label.indexOf("error") >= 0
? datum.label.slice(0, 8)
: datum.label
Логика:
"error" → обрезаетсяdatum.values.length > 10
? datum.values.slice(0, 10)
: datum.values
Применение:
transform Vega-LiteVega-Lite активно применяет JavaScript-подобные выражения в трансформациях.
{
"transform": [
{
"filter": "datum.name.indexOf('A') === 0"
}
]
}
Логика:
indexOf('A') === 0 → строка начинается с буквы A{
"transform": [
{
"calculate": "datum.series.slice(0, 5)",
"as": "preview"
}
]
}
Используется для:
В чистой Vega (signals) данные методы также используются
для динамических вычислений.
{
"signals": [
{
"name": "labelLength",
"update": "datum.label.length"
}
]
}
или
{
"name": "hasKey",
"update": "datum.keys.indexOf('id')"
}
Несмотря на сходство с JavaScript, выражения имеют особенности:
slice, indexOf, length)datum)Комбинация indexOf, slice,
length формирует основу лёгкой предобработки данных прямо в
описании визуализации:
Эти операции позволяют переносить часть логики обработки данных из JavaScript-приложения непосредственно в декларативное описание Vega/Vega-Lite, снижая сложность внешнего слоя приложения и увеличивая переносимость спецификаций визуализации.