Команда ReQL: slice
Синтаксис команды
selection.slice(startOffset[, endOffset, {leftBound:'closed', rightBound:'open'}]) → selection
stream.slice(startOffset[, endOffset, {leftBound:'closed', rightBound:'open'}]) → stream
array.slice(startOffset[, endOffset, {leftBound:'closed', rightBound:'open'}]) → array
binary.slice(startOffset[, endOffset, {leftBound:'closed', rightBound:'open'}]) → binary
string.slice(startOffset[, endOffset, {leftBound:'closed', rightBound:'open'}]) → string
Описание
Возвращает элементы последовательности в указанном диапазоне.
slice возвращает диапазон между startOffset и endOffset. Если указан только startOffset, slice возвращает диапазон от этого индекса до конца последовательности. Укажите leftBound или rightBound как open или closed для указания, включать ли конечную точку диапазона по умолчанию: closed возвращает эту конечную точку, а open — нет. По умолчанию leftBound закрыта, а rightBound открыта, поэтому диапазон (10,13) вернет десятый, одиннадцатый и двенадцатый элементы в последовательности.
Если endOffset находится за пределами последовательности, будут возвращены все элементы от startOffset до конца последовательности. Если startOffset находится за пределами последовательности или endOffset меньше startOffset, будет возвращена последовательность нулевой длины.
Допускаются отрицательные значения startOffset и endOffset для массивов; в этом случае возвращаемый диапазон отсчитывается от конца массива. То есть, диапазон (-2) возвращает два последних элемента, а диапазон (2,-1) возвращает второй элемент через предпоследний элемент диапазона. Ошибка будет выброшена при отрицательном startOffset или endOffset с не-массивами. (Отрицательное значение endOffset -1 разрешено для потока, если rightBound закрыта; это ведет себя так, как если бы endOffset не было указано.)
Если slice используется с объектом binary, индексы ссылаются на позиции байтов в объекте. То есть, диапазон (10,20) будет ссылаться на 10-й байт до 19-го байта.
С строкой slice ведет себя аналогично, с индексами, ссылающимися на кодовые точки Юникода. Индексы строк начинаются с 0. (Обратите внимание, что комбинирующие кодовые точки считаются отдельно.)
Пример: Возвращение четвертого, пятого и шестого самых молодых игроков. (Самый молодой игрок находится на индексе 0, поэтому это элементы 3–5.)
r.table('players').orderBy({index: 'age'}).slice(3,6).run(conn, callback);
Пример: Возвращение всех, кроме трёх верхних игроков, у которых есть красный флажок.
r.table('players').filter({flag: 'red'}).orderBy(r.desc('score')).slice(3).run(conn, callback);
Пример: Возврат держателей билетов X по Y, предполагая, что билеты пронумерованы последовательно. Мы хотим включить билет Y.
r.table('users').orderBy('ticket').slice(x, y, {right_bound: 'closed'}).run(conn, callback);
Пример: Возвращение элементов массива со второго до двух с конца (то есть, не включая последние два).
r.expr([0,1,2,3,4,5]).slice(2,-2).run(conn, callback);
// Result passed to callback
[2,3]
Пример: Возвращение третьей по пятую символов строки.
r.expr("rutabaga").slice(2,5).run(conn, callback);
// Result passed to callback
"tab"
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/javascript/slice/