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(link, [embed?])
- 功能: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"
讨论
若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。
反馈交流
其他渠道
版权声明
版权声明:所有 PKMer 文章如果需要转载,请附上原文出处链接。