函数用于[[Bases 简介|数据库]]中,通过[[属性|属性]]在[[视图#筛选|筛选]]和[[公式|公式]]中操作数据。请参阅[[Bases 语法|数据库语法]]了解更多关于如何使用函数的信息。 除了[[函数#全局|全局]]函数外,大多数函数取决于你要修改的值的类型: - [[函数#任意类型|任意类型]] - [[函数#日期|日期]] - [[函数#字符串|字符串]] - [[函数#数字|数字]] - [[函数#列表|列表]] - [[函数#链接|链接]] - [[函数#文件|文件]] - [[函数#对象|对象]] - [[函数#正则表达式|正则表达式]] ## 全局 全局函数不依赖于任何类型即可使用。 ### `escapeHTML()` `escapeHTML(html: string): string` - 转义字符串中的特殊字符,使其可以安全地嵌入 HTML 中。 ### `date()` `date(date: string): date` - `date(string): date` 解析提供的字符串并返回一个日期对象。 - `date` 字符串的格式应为 `YYYY-MM-DD HH:mm:ss`。 ### `duration()` `duration(value: string): duration` - 将字符串解析为时间段。`value` 字符串格式请参阅[[Bases 语法#日期运算|日期运算部分]]。 - 在执行日期运算时,时间段不需要显式解析(例如 `now() + '1d'`),但在对时间段执行运算时则需要(例如 `now() + (duration('1d') * 2)`)。 - 当对时间段与标量进行运算时,时间段必须在左侧。例如 `duration('5h') * 2`,而不是 `2 * duration('5h')`。 ### `file()` `file(path: string | file | url): file` - 返回给定文件或路径对应的文件对象。 - 示例:`file(link("[[filename]]"))` 或 `file("path to file")`。 ### `html()` `html(html: string): html` - 将字符串转换为可渲染为 HTML 的代码片段。 ### `if()` `if(condition: any, trueResult: any, falseResult?: any): any` - `condition` 是要评估的条件。 - `trueResult` 是条件为真时的输出。 - `falseResult` 是条件为假时的可选输出。如果未提供,则默认为 `null`。 - 如果 `condition` 为真或为真值,则返回 `trueResult`,否则返回 `falseResult`。 - 示例:`if(isModified, "Modified", "Unmodified")` ### `image()` `image(path: string | file | url): image` - 返回一个图片对象,该对象将在视图中渲染图片。 - 示例:`image(image-property)` 或 `image("https://obsidian.md/images/obsidian-logo-gradient.svg")` ### `icon()` `icon(name: string): icon` - 返回一个在视图中渲染为图标的值。图标名称必须与支持的 Lucide 图标匹配。 - 示例:`icon("arrow-right")`。 ### `link()` `link(path: string | file, display?: value): Link` - 解析字符串 `path` 并返回一个 Link 对象,渲染为指向给定路径的链接。 - 可选提供 `display` 参数来更改链接显示的文本。 ### `list()` `list(element: any): List` - 如果提供的元素是列表,则原样返回。 - 否则,将提供的 `element` 包装在列表中,创建一个只有单个元素的列表。 - 当仓库中某个属性包含字符串和列表的混合值时,此函数很有用。 - 示例:`list("value")` 返回 `["value"]`。 ### `max()` `max(value1: number, value2: number...): number` - 返回所有提供的数字中的最大值。 ### `min()` `min(value1: number, value2: number...): number` - 返回所有提供的数字中的最小值。 ### `now()` `now(): date` - `now()` 返回一个表示当前时刻的日期对象。 ### `number()` `number(input: any): number` - 尝试将提供的值作为数字返回。 - 日期对象将以自 Unix 纪元以来的毫秒数返回。 - 布尔值将返回 1 或 0。 - 字符串将被解析为数字,如果结果无效则返回错误。 - 示例:`number("3.4")` 返回 `3.4`。 ### `duration()` `duration(value: string): duration` - 将字符串解析为时间段。`value` 字符串格式请参阅[[Bases 语法#日期运算|日期运算部分]]。 - 在执行日期运算时,时间段不需要显式解析(例如 `now() + '1d'`),但在对时间段执行运算时则需要(例如 `now() + (duration('1d') * 2)`)。 - 当对时间段与标量进行运算时,时间段必须在左侧。例如 `duration('5h') * 2`,而不是 `2 * duration('5h')`。 ### `today()` `today(): date` - `today()` 返回一个表示当前日期的日期对象。时间部分设置为零。 ### `random()` `random(): number` - `random()` 返回一个 0 到 1 之间的随机数。 - 每次加载视图时随机数会刷新。在视图之间切换会改变随机数。 ## 任意类型 可用于任何值的函数。包括字符串(例如 `"hello"`)、数字(例如 `42`)、列表(例如 `[1,2,3]`)、对象等。 ### `isTruthy()` `any.isTruthy(): boolean` - 返回将值强制转换为布尔值后的结果。 - 示例:`1.isTruthy()` 返回 `true`。 ### `isType()` `any.isType(type: string): boolean` - 如果值属于提供的类型,则返回 true。 - 示例:`"example".isType("string")` 和 `true.isType("boolean")` 都返回 true。 ### `toString()` `any.toString(): string` - 返回任何值的字符串表示。 - 示例:`123.toString()` 返回 `"123"`。 ## 日期 可用于日期和时间值的函数,例如 `date("2025-05-27")`。日期比较可以使用[[Bases 语法#日期运算|日期运算]]来完成。 ### 字段 以下字段可用于日期: | 字段 | 类型 | 描述 | | ------------------- | -------- | ----------------- | | `date.year` | `number` | 日期的年份 | | `date.month` | `number` | 日期的月份(1–12) | | `date.day` | `number` | 日期的日 | | `date.hour` | `number` | 小时(0–23) | | `date.minute` | `number` | 分钟(0–59) | | `date.second` | `number` | 秒(0–59) | | `date.millisecond` | `number` | 毫秒(0–999) | ### `date()` `date.date(): date` - 返回一个去除时间部分的日期对象。 - 示例:`now().date().format("YYYY-MM-DD HH:mm:ss")` 返回类似 "2025-12-31 00:00:00" 的字符串。 ### `format()` `date.format(format: string): string` - `format` 是格式字符串(例如 `"YYYY-MM-DD"`)。 - 按照 Moment.js 格式字符串指定的格式返回格式化后的日期。 - 示例:`date.format("YYYY-MM-DD")` 返回 `"2025-05-27"`。 ### `time()` `date.time(): string` - 返回时间部分。 - 示例:`now().time()` 返回类似 "23:59:59" 的字符串。 ### `relative()` `date.relative(): string` - 返回日期与当前日期时间的可读比较。 - 示例:`file.mtime.relative()` 返回类似 `3 days ago` 的值。 ### `isEmpty()` `date.isEmpty(): boolean` - 返回 false。 ## 字符串 可用于字符序列的函数,例如 `"hello"`。 ### 字段 | 字段 | 类型 | 描述 | | --------------- | -------- | ------------------ | | `string.length` | `number` | 字符串中的字符数 | ### `contains()` `string.contains(value: string): boolean` - `value` 是要搜索的子字符串。 - 如果字符串包含 `value`,则返回 true。 - 示例:`"hello".contains("ell")` 返回 `true`。 ### `containsAll()` `string.containsAll(...values: string): boolean` - `values` 是一个或多个要搜索的子字符串。 - 如果字符串包含所有 `values`,则返回 true。 - 示例:`"hello".containsAll("h", "e")` 返回 `true`。 ### `containsAny()` `string.containsAny(...values: string): boolean` - `values` 是一个或多个要搜索的子字符串。 - 如果字符串包含 `values` 中的至少一个,则返回 true。 - 示例:`"hello".containsAny("x", "y", "e")` 返回 `true`。 ### `endsWith()` `string.endsWith(query: string): boolean` - `query` 是要在末尾检查的字符串。 - 如果此字符串以 `query` 结尾,则返回 true。 - 示例:`"hello".endsWith("lo")` 返回 `true`。 ### `isEmpty()` `string.isEmpty(): boolean` - 如果字符串没有字符或不存在,则返回 true。 - 示例:`"Hello world".isEmpty()` 返回 `false`。 - 示例:`"".isEmpty()` 返回 `true`。 ### `lower()` `string.lower(): string` - 返回转换为小写的字符串。 ### `replace()` `string.replace(pattern: string | Regexp, replacement: string): string` - `pattern` 是要在目标字符串中搜索的值。 - `replacement` 是用于替换找到的模式的值。 - 如果 `pattern` 是字符串,则所有出现的模式都将被替换。 - 如果 `pattern` 是正则表达式,`g` 标志决定是只替换第一个还是替换所有出现的匹配。 - 示例:`""a:b:c:d".replace(/:/, "-")` 返回 `"a-b,c,d"`,而 `"a:b:c:d".replace(/:/g, "-")` 返回 `"a-b-c-d"`。 ### `repeat()` `string.repeat(count: number): string` - `count` 是重复字符串的次数。 - 示例:`"123".repeat(2)` 返回 `"123123"`。 ### `reverse()` `string.reverse(): string` - 反转字符串。 - 示例:`"hello".reverse()` 返回 `"olleh"`。 ### `slice()` `string.slice(start: number, end?: number): string` - `start` 是包含起始位置的索引。 - `end` 是可选的不包含结束位置的索引。 - 返回从 `start`(包含)到 `end`(不包含)的子字符串。 - 示例:`"hello".slice(1, 4)` 返回 `"ell"`。 - 如果省略 `end`,则截取到字符串末尾。 ### `split()` `string.split(separator: string | Regexp, n?: number): list` - `separator` 是用于分割字符串的分隔符。 - `n` 是可选的数字。如果提供,结果将包含前 `n` 个元素。 - 返回子字符串的列表。 - 示例:`"a,b,c,d".split(",", 3)` 或 `"a,b,c,d".split(/,/, 3)` 返回 `["a", "b", "c"]`。 ### `startsWith()` `string.startsWith(query: string): boolean` - `query` 是要在开头检查的字符串。 - 如果此字符串以 `query` 开头,则返回 true。 - 示例:`"hello".startsWith("he")` 返回 `true`。 ### `title()` `string.title(): string` - 将字符串转换为标题大小写(每个单词的首字母大写)。 - 示例:`"hello world".title()` 返回 `"Hello World"`。 ### `trim()` `string.trim(): string` - 去除字符串两端的空白字符。 - 示例:`" hi ".trim()` 返回 `"hi"`。 ## 数字 可用于数值的函数,例如 `42`、`3.14`。 ### `abs()` `number.abs(): number` - 返回数字的绝对值。 - 示例:`(-5).abs()` 返回 `5`。 ### `ceil()` `number.ceil(): number` - 将数字向上取整为最接近的整数。 - 示例:`(2.1).ceil()` 返回 `3`。 ### `floor()` `number.floor(): number` - 将数字向下取整为最接近的整数。 - 示例:`(2.9).floor()` 返回 `2`。 ### `isEmpty()` `number.isEmpty(): boolean` - 如果数字不存在,则返回 true。 - 示例:`5.isEmpty()` 返回 `false`。 ### `round()` `number.round(digits: number): number` - 将数字四舍五入为最接近的整数。 - 可选提供 `digits` 参数来四舍五入到指定的小数位数。 - 示例:`(2.5).round()` 返回 `3`,`(2.3333).round(2)` 返回 `2.33`。 ### `toFixed()` `number.toFixed(precision: number): string` - `precision` 是小数位数。 - 返回以定点表示法表示的数字字符串。 - 示例:`(3.14159).toFixed(2)` 返回 `"3.14"`。 ## 列表 可用于有序元素列表的函数,例如 `[1, 2, 3]`。 ### 字段 | 字段 | 类型 | 描述 | | ------------- | -------- | ---------------- | | `list.length` | `number` | 列表中的元素数量 | ### `contains()` `list.contains(value: any): boolean` - `value` 是要搜索的元素。 - 如果列表包含 `value`,则返回 true。 - 示例:`[1,2,3].contains(2)` 返回 `true`。 ### `containsAll()` `list.containsAll(...values: any): boolean` - `values` 是一个或多个要搜索的元素。 - 如果列表包含所有 `values`,则返回 true。 - 示例:`[1,2,3].containsAll(2,3)` 返回 `true`。 ### `containsAny()` `list.containsAny(...values: any): boolean` - `values` 是一个或多个要搜索的元素。 - 如果列表包含 `values` 中的至少一个,则返回 true。 - 示例:`[1,2,3].containsAny(3,4)` 返回 `true`。 ### `filter()` `list.filter(value: Boolean): list` - 通过调用筛选函数来筛选此列表中的元素,该函数使用变量 `index` 和 `value`,并返回一个布尔值表示是否保留该元素。 - `value` 是列表中某个项的值。 - `index` 是当前值的索引。 - 示例:`[1,2,3,4].filter(value > 2)` 返回 `[3,4]`。 ### `flat()` `list.flat(): list` - 将嵌套列表展平为单个列表。 - 示例:`[1,[2,3]].flat()` 返回 `[1,2,3]`。 ### `isEmpty()` `list.isEmpty(): boolean` - 如果列表没有元素,则返回 true。 - 示例:`[1,2,3].isEmpty()` 返回 `false`。 ### `join()` `list.join(separator: string): string` - `separator` 是插入到元素之间的字符串。 - 将所有列表元素连接为单个字符串。 - 示例:`[1,2,3].join(",")` 返回 `"1,2,3"`。 ### `map()` `list.map(value: Any): list` - 通过调用转换函数来转换此列表中的每个元素,该函数使用变量 `index` 和 `value`,并返回要放入列表中的新值。 - `value` 是列表中某个项的值。 - `index` 是当前值的索引。 - 示例:`[1,2,3,4].map(value + 1)` 返回 `[2,3,4,5]`。 ### `reduce()` `list.reduce(expression: Any, acc: Any): Any` - 通过为每个元素运行表达式,将列表中的元素归约为单个值。表达式可以使用变量 `index`、`value` 和 `acc`(累加器),并应返回下一个累加器值。 - `expression` 对列表中的每个元素进行求值。 - `value` 是列表中当前项的值。 - `index` 是当前项的索引。 - `acc` 是到目前为止的累积值。 - 示例(求和):`[1,2,3].reduce(acc + value, 0)` 返回 `6`。 - 示例(最大值):`values.filter(value.isType("number")).reduce(if(acc == null || value > acc, value, acc), null)` 返回最大的数字,如果没有则返回 `null`。 ### `reverse()` `list.reverse(): list` - 就地反转列表。 - 示例:`[1,2,3].reverse()` 返回 `[3,2,1]`。 ### `slice()` `list.slice(start: number, end?: number): list` - `start` 是包含起始位置的索引。 - `end` 是可选的不包含结束位置的索引。 - 返回从 `start`(包含)到 `end`(不包含)的列表浅拷贝。 - 示例:`[1,2,3,4].slice(1,3)` 返回 `[2,3]`。 - 如果省略 `end`,则截取到列表末尾。 ### `sort()` `list.sort(): list` - 将列表元素从小到大排序。 - 示例:`[3, 1, 2].sort()` 返回 `[1, 2, 3]`。 - 示例:`["c", "a", "b"].sort()` 返回 `["a", "b", "c"]`。 ### `unique()` `list.unique(): list` - 去除重复元素。 - 示例:`[1,2,2,3].unique()` 返回 `[1,2,3]`。 ## 链接 可用于链接的函数。链接可以从文件(`file.asLink()`)或路径(`link("path")`)创建。 ### `asFile()` `link.asFile(): file` - 如果链接指向有效的本地文件,则返回文件对象。 - 示例:`link("[[filename]]").asFile()` ### `linksTo()` `link.linksTo(file): boolean` - 返回 `link` 所代表的文件是否有指向 `file` 的链接。 ## 文件 可用于仓库中文件的函数。 ### 字段 以下字段可用于文件: | 字段 | 类型 | 描述 | | ----------------- | -------- | --------------------------------- | | `file.name` | `string` | 此文件的名称。 | | `file.basename` | `string` | 不含扩展名的文件名称。 | | `file.path` | `string` | 相对于仓库根目录的完整文件路径。 | | `file.folder` | `string` | 父文件夹的完整路径。 | | `file.ext` | `string` | 此文件的扩展名。 | | `file.size` | `number` | 此文件的大小,以字节为单位。 | | `file.properties` | `object` | 此文件的笔记属性。 | | `file.tags` | `list` | 此文件的标签。包括行内标签。 | | `file.links` | `list` | 此文件中的内部链接。 | | `file.ctime` | `date` | 此文件创建时的时间戳。 | | `file.mtime` | `date` | 此文件最后修改时的时间戳。 | ### `asLink()` `file.asLink(display?: string): Link` - `display` 链接的可选显示文本。 - 返回一个渲染为可用链接的 Link 对象。 - 示例:`file.asLink()` ### `hasLink()` `file.hasLink(otherFile: file | string): boolean` - `otherFile` 是另一个文件对象或要检查的字符串路径。 - 如果 `file` 链接到 `otherFile`,则返回 true。 - 示例:如果从 `file` 到 `otherFile` 存在链接,`file.hasLink(otherFile)` 返回 `true`。 ### `hasProperty()` `file.hasProperty(name: string): boolean` - 如果笔记具有给定的文件属性,则返回 true。 ### `hasTag()` `file.hasTag(...values: string): boolean` - `values` 是一个或多个标签名称。 - 如果文件具有 `values` 中的任何标签,则返回 true。 - 示例:如果文件具有标签 `#tag1` 或 `#tag2`,`file.hasTag("tag1", "tag2")` 返回 `true`。这也包括任何[[标签#嵌套标签|嵌套标签]],例如 `#tag1/a` 或 `#tag2/b`。 ### `inFolder()` `file.inFolder(folder: string): boolean` - `folder` 是要检查的文件夹名称。 - 如果文件在指定的文件夹或其子文件夹中,则返回 true。 - 示例:`file.inFolder("notes")` 返回 `true`。 ## 对象 可用于键值对集合的函数,例如 `{"a": 1, "b": 2}`。 ### `isEmpty()` `object.isEmpty(): boolean` - 如果对象没有自身属性,则返回 true。 - 示例:`{}.isEmpty()` 返回 `true`。 ### `keys()` `object.keys(): list` - 返回包含对象键的列表。 ### `values()` `object.values(): list` - 返回包含对象值的列表。 ## 正则表达式 可用于正则表达式模式的函数。示例:`/abc/`。 ### `matches()` `regexp.matches(value: string): boolean` - `value` 是要测试的字符串。 - 如果正则表达式匹配 `value`,则返回 true。 - 示例:`/abc/.matches("abcde")` 返回 `true`。