ecswc
(陈立国)
1
刚接触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()限制最终结果的数量也是一样的问题
Probe
(Probe)
2
一般可以先格式化, 为了看清楚点
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 个赞