Dataviewjs 基本用法

万分感谢!!!还有两问:
1-如果让let file 等于其他页面要怎么写呀?
我测试了把dv.current()改成dv.page(“文件夹名”)不行,求解~
2-如何把搜索出来的标题link回到页面的对象

回复老是出错不知怎么回事

dv.page(‘“文件夹名”’) "文件夹名"需要加一层单引号

你说的是对的,我看了别的文章也是这么说,
但是把它dv.page(‘“文件夹”’)在我的代码里,就不行。。
应该是代码冲突还是其他什么问题。。

——————以下是代码内容——————
1、获取当前页面的所有标题和关键词

```dataviewjs
const patentArray = app.metadataCache.getFileCache(dv.current().file).headings;
const headingArray = ["标题名称", "关键词"]
const patentContentArray = [];
const page = dv.current()
for(let i = 0; i < patentArray.length; i++) {
    patentContentArray.push({
         name: `[[#${patentArray[i].heading}]]`,
        keyname: page["关键词"][i]
    })
}
dv.table(headingArray, patentContentArray.map(
    p => [
        p.name,
        p.keyname
    ]
))
```

这个搜索结果没有问题

2、获取其他某个页面上的所有标题和关键词

```dataviewjs
const patentArray = app.metadataCache.getFileCache(dv.page("文件名").file).headings;
const headingArray = ["标题名称", "关键词"]
const patentContentArray = [];
const page = dv.page("文件名")
for(let i = 0; i < patentArray.length; i++) {
    patentContentArray.push({
         name: `[[#${patentArray[i].heading}]]`,
        keyname: page["关键词"][i]
    })
}
dv.table(headingArray, patentContentArray.map(
    p => [
        p.name,
        p.keyname
    ]
))
```

这搜索结果也没有问题

3、获取某个文件夹里面的所有文件的标题和关键词

```dataviewjs
const patentArray = app.metadataCache.getFileCache(dv.page('"文件夹名"').file).headings;
const headingArray = ["标题名称", "关键词"]
const patentContentArray = [];
const page = dv.page('"文件夹名"')
for(let i = 0; i < patentArray.length; i++) {
    patentContentArray.push({
         name: `[[#${patentArray[i].heading}]]`,
        keyname: page["关键词"][i]
    })
}
dv.table(headingArray, patentContentArray.map(
    p => [
        p.name,
        p.keyname
    ]
))
```

这个显示不出来了,显示错误“Evaluation Error: TypeError: Cannot read properties of undefined (reading ‘file’)”

怎么获取某个文件夹下的所有文件,不仅有md文档,也有pdf、word等。

可以使用 app.vault.getFiles().filter(p=>p.path.includes('文件夹')) 的方法,不过这和 dv.pages() 返回的数组中的元素不一样,getFiles 返回的元素里面的属性是这样的

感谢大佬回复,才开始用ob,我想用dataview生成表格,把指定文件夹下的文档(非md格式)展示出来,能劳烦写个示例吗?

这样子吗

```dataviewjs
let files = app.vault.getFiles().filter(p=>p.path.includes('未命名') && p.extension!='md')
dv.table(['file'],files.map(p=>[`[[${p.path}|${p.basename}]]`]))
```

好的,多谢多谢! :grin:

app.vault.getFiles() 获取的文件如何排序?

你希望按什么排序

名称、创建时间、文档类型等这些。我尝试了没成功,有什么文档我能看着学一学吗? :joy:

排序的话可以这样

```dataviewjs
let files = app.vault.getFiles().filter(p=>p.path.includes('未命名') && p.extension!='md')
files = dv.array(files).sort(p=>p.basename) // 名字 p.stat.ctime创建时间 p.extension后缀
dv.table(['file'],files.map(p=>[`[[${p.path}|${p.basename}]]`]))
```

多谢多谢 :+1:

可以请教一下如何将file.cday得到的内容转换成数字吗?

直接Number(a.file.cday),或a.file.cday.ts

因为看不懂,写的很好!

getFiles 返回元素的属性,您这个图片是在哪里截的图?ob里吗?

@ielchen 这是开发控制台的截图,见 DataviewJS 小白手册 - 开发控制台 - 步骤

好的,谢谢大佬。