[已解决]如何修改如下dataviewjs代码筛除掉已完成部分task,保留未完成部分task?

请仔细说明自己遇到的问题,以下是参考模板。这里不要求非得按模板发帖,但内容中包含相关要素能让大家更好地帮助你。


遇到的问题

目前如下代码把已完成的task都汇总了:


let tasks = dv.pages('"项目"') 
.file
.tasks
.where(t => t.text.includes("") || t.text.includes("关键词2")) 
.array()

 
// 按文件名分组
let groupedTasks = tasks.reduce((groups, task) => {
    const key = task.header.path; // 使用任务的 path 作为分组键
    (groups[key] = groups[key] || []).push(task);
    return groups;
}, {});
// 将分组后的对象转换为数组,并按照键名倒序排序
let sortedGroupedTasks = Object.entries(groupedTasks)
    .sort(([keyA], [keyB]) => keyB.localeCompare(keyA)) // 按键名倒序排序
    .reduce((sortedGroups, [key, value]) => {
        sortedGroups[key] = value; // 重新构建对象
        return sortedGroups;
    }, {});

Object.entries(sortedGroupedTasks).forEach(([key, tasks]) => {

    dv.taskList(tasks);
});

预期的效果

需要筛除掉已完成部分task,保留未完成部分task。

已尝试的解决方案

问了通义灵码:得到以下两种修改方式:
1.

let tasks = dv.pages('"项目"')
    .file
    .tasks
    .where(t => !t.text.startsWith('[x]') && !t.text.startsWith('[-]') && (t.text.includes("") || t.text.includes("关键词2")))
    .array();

// 原来的分组、排序和显示代码保持不变...
let tasks = dv.pages('"项目"')
    .file
    .tasks
    .where(t => !t.done && (t.text.includes("") || t.text.includes("关键词2")))
    .array();
// 接下来是分组、排序和显示代码...

以上两种代码都把已完成和未完成的的task汇总在一起了

请朋友们指教 如何修改

从别的坛子得到回复了:
.where(t => !t.completed)

谢谢补充信息, 应该说的是 这篇


各类大模型不太好回答这种 API 细节问题, 通义灵码猜个 !t.done 也算是接近了, 正确答案 t.completed 可以从这里找到 ref

dv Tasks 可具有的全部属性见 Metadata on Tasks and Lists - Dataview

PS. 猜测把 dataview 官方 doc 的一包 md 文件, 直接扔到代码项目的同目录里, 也许某些 Code Copilot 类工具就能够有效利用, 做出正确回答

PS2. 非代码类的知识库工具, 例如 RAGFlow 我一会儿试试能否简单利用 dataview doc

1 个赞

补充自己的实验…

首先说明, 在大致知道去哪找的时候, 最方便的还是查文档
其次, 如果不打算搜文档, 我试了俩偷懒办法:

  1. 把 dataview 的 doc 目录丢 VSCode 项目里, 直接复制问题, 让代码类补全工具去生成回答
  2. 把 dataview 的 doc 目录丢 RAGFlow demo 里, 之后同上

前者 AI 回复失败了 (但我用的并不是公认最好的 GitHub Copilot, 也许 GitHub Copilot 能办到, 其他类 Copilot 工具好好研究设置细节说不定也 ok)


而 RAGFlow 方案非常简单就成功了, 细节是:

  1. 做了两组文档:
    • 标准的 dataview 文档
    • 虚假的 dataview 文档: 把 文档里的 所有的 completed 全改为 accomplished
      • 为啥改? 因为正确答案太简单了, 不靠本地知识就能猜出
  2. 复制楼主代码, 对两个库分别询问答案

结果

  1. 真实知识库回答正确, 但这并不稀奇
  2. 虚假知识库果然给出了错误回答, 说明 AI 真是读了这文档做解答的, 见图

1 个赞

这方面还需要学一下,谢谢分享

1 个赞