发你的代码,我试试,我这边和你的情况一样没问题
我就是用你的拷贝的
```dataviewjs
const allows = dv.page("b笔记.md").file.outlinks.values.map(it=>it.path);
const allowFiled = p => p.file.outlinks.values.map(it=>it.path);
const isAllow=(fields)=>allows.some(item=>fields.includes(item))
dv.header(3, '今日之前')
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) < new Date(new Date().setHours(0, 0, 0, 0))&&isAllow(allowFiled(p))).map(p=>p.file.link))
这里b笔记改成c笔记,都能显示a笔记的反链。
嗯嗯,你这个正是我想要的效果
感谢感谢,真是麻烦你了
今日之前不应该包含b,b的日期是今天,具体原因我也不清楚,建议在新仓库中,纯净环境中测试,这个需要根据自己情况去测试。
嗯嗯 我知道了,麻烦你了
没有改
谢谢,确实,那b日期就没问题了,不过,他的第一份代码,即下面这个,什么都筛选不到,不清楚什么原。
```dataviewjs
//允许列表,只有在这个列表中的才被筛选(比如允许inlinks包含demo.md的文件等)
const allows = ["a笔记.md"];
//筛选数组类型的字段(比如tags等)
//const allowFiled = p => p.file.tags.values;
//筛选数组对象类型的字段(比如inlinks,outlinks等)
const allowFiled = p => p.file.outlinks.values.map(it=>it.path);
//其他字段也可以通过修改allowFiled函数实现
//判断是否允许的字段
const isAllow=(fields)=>allows.some(item=>fields.includes(item))
dv.header(3, '今日之前')
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) < new Date(new Date().setHours(0, 0, 0, 0))&&isAllow(allowFiled(p))).map(p=>p.file.link))
const start = '2024-01-01 00:00:00';
const end = '2024-01-02 23:59:59';
dv.header(3, `${start.substr(0, 10)} ~ ${end.substr(0, 10)} 之间`)
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) >= new Date(start)&&new Date(p.ctime) <= new Date(end)&&isAllow(allowFiled(p))).map(p=>p.file.link))
```
不过,殊路同归,能解决问题就行。
哦,我都没有留意改掉时间,
这个应该没有问题吧
只要在ctime的时间范围内,按理应该都能筛选出来
我自己测试了下,只有
const allows = dv.page(“b笔记.md”).file.outlinks.values.map(it=>it.path)
或者
const allows = dv.page(“c笔记.md”).file.outlinks.values.map(it=>it.path)
才能显示
这种效果
const allows = dv.page(“b笔记.md”).file.outlinks.values.map(it=>it.path)
或者
const allows = dv.page(“c笔记.md”).file.outlinks.values.map(it=>it.path)
这样就不就相当于 const allows = ["a笔记.md"];
吗?我也很奇怪,你直接写为什么不行。
获取b或c的外链路径数组,它们的外链不就是a笔记嘛,所以我感觉你const allows = ["a笔记.md"];
这条语句有问题,删除掉重写试试。
也可以这样,const allows = [dv.current().file.path];
,避免手写意外,不过这样,代码就只能放到a笔记中执行。
不过,const allows = dv.page(“b笔记.md”).file.outlinks.values.map(it=>it.path),这种方式是不安全的,如果b还有其他外链容易产生意外。
还有一种安全的方式,是如下
const allows = dv.page("a笔记.md").file.inlinks.values.map(it=>it.path)
const allowFiled = p => [p.file.path];
但这种外层循环会遍历a所有的内链,理论上性能差那么可以忽略的一丢丢,人是无法感知的,除非你内链多的惊人。一般人不会这么多吧。
const allows = ['文件目录/a笔记.md']
这样应该清楚一些,就是说要写基于库的路径,而不是只写名字。
确实,这样更不容易产生歧义或误解,尤其对新手来说。
嗯嗯。好的,谢谢
恩。好的,谢谢
请问下这里的 DataviewJS 代码如何直接转成 JS 脚本?然后再runjs里运行呢!
最上面加上这个应该就可以了
const dv = DataviewAPI;
const dv = DataviewAPI;
dv.header(3, '今日之前')
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) < new Date(new Date().setHours(0, 0, 0, 0))).map(p=>p.file.link))
const start = '2024-01-01 00:00:00';
const end = '2024-01-02 23:59:59';
dv.header(3, `${start.substr(0, 10)} ~ ${end.substr(0, 10)} 之间`)
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) >= new Date(start)&&new Date(p.ctime) <= new Date(end)).map(p=>p.file.link))
是这样吗?可是汇聚出来的内容的话是在哪里显示的?