Dataview 中的构造函数

Dataview 中的构造函数

Dataview 提供了 11 个构造函数,可以将输入值转换为其他数据类型,也就是强制类型转换。这一类函数的函数名通常和数据类型有关,比如 number() 函数可以把输入值转换成数值类型,string() 函数可以把输入值转换成字符串类型。

object(key1, value1, ...)

  • 功能

把输入值以键值对的形式转换成一个对象,返回值自然就是这些键值对构造成的一个对象,也就是 object;

  • 输入值

有省略号说明可以有很多个输入值,但是必须是偶数个,否则就会有属性为空值,Dataview 会报错;

对于每一对输入值来说,前一个输入值 key1 是对象的第一个属性名,后一个输入值 value1 是前一个属性的属性值;

  • 示例
`=object("书名", "安徒生童话", "作者", "安徒生", "字数", 925000)`

list(value1, value2, ...)

  • 功能

把所有的输入值组成一个列表 [value1, value2, ..., valuen],然后返回给你;

  • 输入值:valuen

有省略号,并且给的两个输入值是 value1, value2,说明后面是 value3, value4 …,这代表了输入值的个数不限。

  • 示例
list()                  => 返回一个空列表
list(1, 2, 3)           => 返回列表 [1,2,3]
list("a", "b", "c")     => 返回列表 ["a", "b", "c"]

date(any)

  • 功能

date() 函数可以把其他数据转换为日期。然后我们就可以对这个日期类型做其他很多操作。更多的输入值可以见 Literals 字面常量.

  • 输入值:any

这里给的提示词是 any,并且没有省略号,说明只能有一个输入值,并且可以输入各种数据,可以是字符串,可以是表达式,甚至可以是一个链接。但是只有输入正确的值才会得到我们想要的结果。

  • 示例
date("2020-04-18")     => 由字符串 "2020-04-18" 转换为了日期 2020 年 4 月 18 日
date(2020-04-18)       => 由表达式 2020-04-18 转换为了日期 2020 年 4 月 18 日
date([[2021-04-16]])   => 甚至链接如果满足日期的格式,也可以转换为日期数据

提示

该函数还可以搭配 dateformat() 函数来修改返回数据显示的格式,比如 dateformat(date(now),"yyyy-MM-dd"),参阅 35 - Dataview 中的实用函数

dur(any)

  • 功能

dur,是 duration 持续时间的缩写,我们在 Literals 字面常量 中已经了解过这个函数。他可以把字符串转换为对应的定长时间。

  • 输入值:any

提示词是 any,并且没有省略号,说明只能有一个输入值,并且可以输入各种数据,在字面量中已经全部列出;

  • 示例
dur(8 minutes)                      => 返回一个代表八分钟的时长数据
dur("8 minutes, 4 seconds")         => 返回一个代表八分四秒的时长数据
dur(dur(8 minutes))                 => 输入值也可以是一段时间,就是和单个使用的效果一样

number(string)

  • 功能

把字符串转换成对应的数值,我们不能计算 “1” + “1”,这是两个字符串相加。需要用这个函数把字符串转换为数字之后才可以进行运算。

  • 输入值

string 字符串,也可以是数值。

  • 示例
number("18 years")     => 可以把字符串 "18 years" 转换为 18
number(34)             => 如果输入值就是数值,返回也会还是数值 34
number("hmm")          => 如果输入的字符串中没有数字,会返回空值

string(any)

  • 功能

这也是一个非常常用的函数,可以把任何数据强制变成文本。对于我们可以直接写出来的数据,直接加上双引号即可。但是考虑下如果我们想把变量 file.link 变成字符串,我们直接写成 “file.link” 的话,我们得到的是字符串 “file.link”,而不是我们想要的链接名字,这时候就需要用到 string(file.link)

  • 输入值:any 可以把任何数据转化为字符串;

  • 返回值: 返回一个由输入值组成的字符串;

  • 示例

string(18)                   => 返回字符串 "18"
string(dur(8 hours))         => 返回字符串 "8 hours"
string(date(2021-08-15))     => 返回字符串 "August 15th, 2021"

link(path, [display])

  • 功能:link

把输入值转换成一个链接,配合 embed() 函数可以插入图片。

  • 输入值:path, [display]

path 是路径的意思,该函数的输入值是文件的路径,可以根据这个路径变成指向这个页面的链接,路径可以简单的为文件名。第二个输入值 display 就是链接显示的文字,其实就是 [[path|display]]

  • 示例
link("Hello")               => 返回一个指向文件名为 'Hello' 的页面的链接 [[Hello]]
link("Hello", "Goodbye")    => 返回一个指向文件名为 'Hello' 的页面的链接,并显示 'Goodbye'(而不是 'Hello') [[Hello|Goodbye]]
  • 功能:embed

把链接嵌入 Dataview 的结果中,就是在链接开头加上感叹号的意思 [[链接]] => ![[链接]],一般用于嵌入图片。

  • 输入值:link, [embed?]

link 说明输入值链接,而 [embed?] 的中括号代表这个输入值可有可无,用于对前者嵌入的内容添加尺寸。

  • 示例
embed(link("Hello.png"))         => 嵌入链接 "Hello.png" 指向的图片;
embed(link("Hello.png", "50"))   => 嵌入链接 "Hello.png" 指向的图片,设置尺寸为 50;

技巧

由于 obsidian 中的路径是相对于库的路径,为了防止出错,我们可以用 meta(...).path 来确保对应文件的路径正确。此时查询应该写成 embed(link(meta(...).path, "50")).

elink(url, [display])

  • 功能:elink

构建到外部网站 (比如 <www.google.com>) 的链接。如果提供了两个参数,第二个参数是链接的显示名称。

  • 输入值:url, [display]

url 就是网址,本质上还是字符串。display 可有可无,如果想要链接显示其他名称可以填写;

  • 示例
elink("www.google.com")              => 指向谷歌网站的外部链接;
elink("www.google.com", "Google")    => 指向谷歌网站的外部链接,链接显示 "Google";

typeof(any)

  • 功能

获取任何要检查的对象的类型。可以与其他操作符一起使用以根据类型更改行为,例如 where typeof(...) = date)

  • 输入值

可以是任何输入值;

  • 返回值

会返回几种固定的字符串:number, string, array, object, date 和 duration。我们可以利用返回值来判断自己的 dataview 查询代码是否正确,文件的属性的类型是否正确等。

  • 示例
typeof(8)                   => 返回字符串:"number"
typeof("text")              => 返回字符串:"string"
typeof([1, 2, 3])           => 返回字符串:"array"
typeof({ a: 1, b: 2 })      => 返回字符串:"object"
typeof(date(2020-01-01))    => 返回字符串:"date"
typeof(dur(8 minutes))      => 返回字符串:"duration"

讨论

若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。



反馈交流

其他渠道

版权声明