跳到主要内容

generateKeyBetween()

function generateKeyBetween(
a,
b,
digits?,
intDigits?
): string;

Defined in: packages/utils/src/indexing/fractional-indexing.ts:446

在两个排序键之间生成一个新的排序键 用于在有序列表中插入新项目,支持任意位置插入

a 是下界(排序键,或 null 表示列表开头),b 是上界(排序键,或 null 表示列表结尾)。 两者都非 null 时可以任意顺序传入:顺序颠倒会被自动交换,这只是为调用方提供便利, 不影响生成键的性质。

注意 digits 只定义键的数字取值。每个键的整数部分还以一个长度标记(head)开头, 取自 intDigits 字母表。head 只出现在首位且只与其他 head 比较,因此 digits 与 intDigits 可以重叠(甚至完全相同),键仍能正确排序。

intDigits 默认等于 digits,所以 base-10 字母表会产生 50 / 600 / 49 这类 自带头字符的键。digits 也省略时回退到 BASE_52_DIGITS(A-Z / a-z), 即经典的 a0 / b00 / Z9 形态。注意显式传入 digits(即便传的是 BASE_62_DIGITS)也会使键变为自带头字符,只有完全省略 digits 才得到 A-Z / a-z 头。

Parameters​

ParameterTypeDescription
aOrderKey下界键(null 表示列表开头)
bOrderKey上界键(null 表示列表结尾)
digits?string数字字母表,字符须为单字节(字符码 0-255)且按字符码升序;默认 BASE_62_DIGITS。 因 intDigits 默认取自 digits,奇数长度的 digits 必须搭配显式的偶数长度 intDigits
intDigits?string头字母表,须为偶数长度且按字符码升序;前半段为负长度头,后半段为正长度头。 最外侧字符标记最长的整数部分,跨越中点的两个字符标记最短的(长度 2)。 整数部分最多增长到最外侧的头,因此更短的字母表会限制键的整数部分能变得多大/多小

Returns​

string

新生成的排序键

Throws​

当参数无效或无法生成键时抛出错误

Examples​

// 在列表开始插入
const firstKey = generateKeyBetween(null, 'a1'); // 'a0V'
// 在列表结尾插入
const lastKey = generateKeyBetween('a1', null); // 'a2'
// 在两个键之间插入
const middleKey = generateKeyBetween('a1', 'a2'); // 'a1V'
// base-10:头字符取自 digits 本身,0-4 为负长度头、5-9 为正长度头,4/5 标记最短整数部分
generateKeyBetween(null, null, '0123456789'); // '50'