DataviewJS 小白手册

小白(我)入门 DataviewJS 方法:

后续教程:DataviewJS 的提取与汇总DataviewJS 的翻页与随机

开发控制台

步骤(重要,点击展开)

1、打开 DevTools

Ctrl + Shift + I,窗口边框样式为 Obsidian 风格还可以左上角 Ob 图标 - View - Toggle Developer Tools。

2、找到 Console,向下滑找到小三角

image

法 1:在 Ob 正常书写 DataviewJS,用 console.log() 将想要显示的内容包裹起来,保持控制台打开,书写完毕渲染代码块时自动接收结果

例:console.log(dv.current()) 获取当前文件元数据

可在 GIF 直观看到 console.logdv.paragraph 的对应关系。

20231219_105856

法 2:在小三角所在行输入代码,回车

例:DataviewAPI.page(app.workspace.getActiveFile().basename) 获取当前文件元数据(如题图)

注意:法 1、法 2 两种方式支持的 API 有区别。

3、结果点击实心小三角展开

通过控制台调试,我们能很快查明一些对于小白难以弄懂的问题。

例如
dv.pages('[[名称]]')

表示所有含出链 [[名称]] 的文档,而不是名为“名称”的文档。

复习:dv.pages()dv.page() 各自的写法和作用。


变量 全局变量 字符串 数组
x global.x 'x' 或 "x" [x]
连接得字符串
以结果为一个 <img> HTML 标签为例,x 为变量
1. "<img src=\"" + x + "\">"(符号"需\转义)
2. "<img src='" + x + "'>"(符号'无需转义)
3. `<img src="${x}">` 或 `<img src='${x}'>`
连接数组每项得字符串:.join()

[1, 2, 3].join('\n') 结果:1\n2\n3\n 为换行符)

连接数组:.concat()

[x].concat([y]) 结果:[x, y]


一个一维数组可看做表格的一行。一个二维数组 [ [1.1, 1.2], [2.1, 2.2] ]
[
[1.1, 1.2],
[2.1, 2.2]
]

即类似:

1.1 1.2
2.1 2.2
批处理:.map()

i 为变量,数组 为一个二维数组。

数组.map(p=> p[i]) 结果:[数组[0][i], 数组[1][i], 数组[2][i]...]

JS 计数从 0 开始,此结果意为取出二维数组中第 1 个数组的第 i 项、第 2 个数组的第 i 项、第 3 个数组的第 i 项…组成新数组。
也即将二维数组“表格”的第 i 列取出,组成新“表格”的一行。


赋值 值相等 值不等 值和类型相等 值和类型不等
= == != === !==
有键无值为 null,无键为 undefined
// 在没有重复定义属性的情况下
.filter(p=> p.编码)  // 有键名"编码"且有值
.filter(p=> !p.编码)  // 有键名"编码"且无值 + 无"编码"键
.filter(p=> p.编码 === null)  // 有键名"编码"且无值
.filter(p=> p.编码 === undefined)  // 无"编码"键
`p.编码?.includes()` 的 `?` 是什么
  • 可选链操作符,在访问对象的属性时,避免因为属性不存在而抛出错误。
  • p 是一个对象,p.编码 表示 p 的属性 编码,在 Ob 可以以 YAML 键形式定义。
  • .includes() 是一个 JS 方法,判断是否包含某个指定的值,返回一个布尔值(True or False)。

进行批处理时,

p.编码.includes() 表现为只要文件夹下有文档没有键名“编码”,就报错无法运行。

p.编码?.includes() 表现为:

  • 如果 p.编码 存在,就返回 p.编码 是否包含结果。
  • 如果 p.编码 不存在,就返回 undefined。
6 个赞

优秀,很厉害的总结和学习能力

2 个赞