关于dateviewjs,sort()和limit()如何全局生效?

刚接触dateviewjs,
不明白为什么以下代码执行的是:
“每篇文档,包含元数据score的list,按元数据score大小单独排序→再汇总”,

而不是“汇总后再进行排序”?

let list =[]
//score是内联字段
dv.pages("#陈").map(k =>k
.file.lists.sort(t =>t.score ?? 0,'desc')
.filter(t => t.text.includes("[score::"))
.limit(2)
.map( t =>{
list.push([t.text,k.file.link])
}
))
dv.table(["近期最佳文案","提交时间"], list)

用limit()限制最终结果的数量也是一样的问题

一般可以先格式化, 为了看清楚点

let list = [];
//score是内联字段
dv.pages("#陈").map((k) =>
    k.file.lists
        .sort((t) => t.score ?? 0, "desc")
        .filter((t) => t.text.includes("[score::"))
        .limit(2)
        .map((t) => {
            list.push([t.text, k.file.link]);
        })
);
dv.table(["近期最佳文案", "提交时间"], list);

所以这能看出来, 逻辑是对单篇笔记里面的 list item 先排 score, 再取 top2, 最后输出
sort limit 全都作用到单个笔记的 list item 上了


感觉缺了一步, 应该先抓所有 list item 再排序, 类似下面这种

let allListItems = [];
// debugger;
dv.pages("#陈").forEach(page => {
  page.file.lists.forEach(item => {
    if (item.score && item.score >= 0.1) { // 定制过滤逻辑
      allListItems.push(item);
    }
  });
});

allListItems.sort((a, b) => b.score - a.score);
dv.table(["列名1", "列名2"], allListItems.map(item => [item.text, item.link]));
1 个赞