现在阅读,以多看和微信读书为主,在阅读过程中会做笔记。一直想把这些笔记统一管理起来,标记出值得记忆的片段,每天随机生成,便于复习巩固。

Roam Research 有一个插件叫 Roam42,可以随机生成指定标签的笔记到新的笔记中,以便于复习。之前在推特上看 @Jiayuan 就是用这种方式管理笔记的,非常羡慕这个功能。

后来经过摸索,发现 Dataview 可以在 Obsidian 中使用 JS 实现所有自己想要的效果,包括随机生成笔记复习这件事。我写了一个代码片段,可以随机生成 3 个带 #Quote 标签的读书笔记段落。

具体代码块如下,term 表示标签名 #QuoteranNum 表示随机数 3,可以根据自己的需要修改。将以下内容粘贴至笔记中,预览。拖动 Banner 可以再自动随机一次。

```dataviewjs
//使用时修改关键词即可
const term = "#Quote"
const files = app.vault.getMarkdownFiles()
const arr = files.map(async ( file) => {
const content = await app.vault.cachedRead(file)
const lines = content.split("\n").filter(line => line.contains(term))
return lines
})

function generateArray (start, end) { return Array.from(new Array(end + 1).keys()).slice(start) }

Promise.all(arr).then(values => {
    //不包含本文件
    let noteArr = values.flat().filter(note => !note.includes("const term ="))
    //生成一个连续数值的数组
    let arrNum = generateArray(0,noteArr.length-1)
    let result = [ ]
    let ranNum = 3

    for (let i = 0; i < ranNum; i++) {
        var ran = Math.floor(Math.random() * (arrNum.length - i))
        result.push(arrNum[ran])
        arrNum[ran] = arrNum[arrNum.length - i - 1]
    }

    for(let i=0; i< result.length;i++){
        let j = result[i]
        dv.paragraph(`${noteArr[j]}`)
    }
})

其他更多更详细的功能可以看知乎上的一个全面解读 Dataview 编写的教程

说明:本文同步发表于个人博客