小鱼塘--自说自话的地方

  • 小玩意
  • 小想法
记录自己技术和想法地方
  1. 首页
  2. obsidian
  3. 正文

obsidian dataview 实现随机获取一个笔记某段文字

18 9 月, 2023 1557点热度 0人点赞 0条评论
内容目录

需求

自己想实现每日笔记看到之前写的想法,这些想法一般都是就是一段文字,方便自己偶尔看看,可能触发新的想法

这样子类似场景应该有一些,笔记不仅仅记录,而是要经常读进行思考

代码

更新

/**
** dic: 文具文件目录
** number: 随机段落
** real_time: 是否实时渲染,每次编辑执行一次,我感觉导致写作干扰,只要打开一次就可以了
**/
function getPagraph(dic, number, real_time) {
    var last_modify_time = dv.current().file.mtime.ts
    console.log(last_modify_time)
    var timestamp = new Date().getTime()
    console.log("stamp:" + timestamp)
    var gap = timestamp - last_modify_time
    if(!real_time && gap < 10*1000 ){
        console.log("不能读取")
        writeLastParagraph()
        return false
    }

    const folder = app.vault.getAbstractFileByPath(dic);
    const files = folder?.children;
    const arr = files.map(async (file) => {
        const content = await app.vault.read(file)
        const lines = content.split("\n")
        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()
        if (noteArr.length == 0) return
        //生成一个连续数值的数组
        let arrNum = generateArray(0, noteArr.length - 1)
        let result = []
        let ranNum = number//个数

        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]
        }
        window.last_result = [];
        for (let i = 0; i < result.length; i++) {
            let j = result[i]
            var write_data = `${noteArr[j]}`
            window.last_result.push(write_data)
            dv.paragraph(write_data)
        }
    })
    function writeLastParagraph(){
            if(window.last_result){
                for (let i = 0; i < window.last_result.length; i++) {
                let j = window.last_result[i]
                dv.paragraph(j)
            }
        }
    }
}

getPagraph("思考/临时思考", 2, false)

可以直接是否实时渲染,因为obsidian默认编辑实时渲染,所以我增加一个判断逻辑从而支持关闭实时渲染。

function getPagraph(dic, number) {
    const folder = app.vault.getAbstractFileByPath(dic);
    const files = folder?.children;
    const arr = files.map(async (file) => {
        const content = await app.vault.read(file)
        const lines = content.split("\n")
        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()
        if (noteArr.length == 0) return
        console.log(noteArr)
        //生成一个连续数值的数组
        let arrNum = generateArray(0, noteArr.length - 1)
        let result = []
        let ranNum = number//个数

        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]}`)
        }
    })
}

getPagraph("思考/临时思考", 2)

总结

  1. 指定文件夹读取笔记内容
  2. 按照回车切割
  3. 随机获取指定条数段落

如果实时渲染,如果打一段文字就会进行随机内容,如果不能接受,可以设置当前为源码模式

标签: 暂无
最后更新:22 9 月, 2023

小鱼儿

爱研究技术,爱玩LOL

点赞
< 上一篇

COPYRIGHT © 2022 小鱼塘. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

湘ICP备18005349号