早说嘛,dataview我不熟,这个我熟啊
```dataviewjs
let files = dv.pages(`"500_日记"`)
dv.table(['字段','数量'],files.groupBy(p=>p.字段).sort(p=>p.rows.length,'desc').map(p=>[p.key,p.rows.length]))
```
早说嘛,dataview我不熟,这个我熟啊
```dataviewjs
let files = dv.pages(`"500_日记"`)
dv.table(['字段','数量'],files.groupBy(p=>p.字段).sort(p=>p.rows.length,'desc').map(p=>[p.key,p.rows.length]))
```
大佬赛高,学习了~
再加个 字段值不为空怎么写呢?
啥叫加个字段不为空,过滤空值的文件吗
是的,过滤字段值为空的文件
```dataviewjs
let files = dv.pages(`"500_日记"`)
dv.table(['字段','数量'],files.filter(p=>p.字段).groupBy(p=>p.字段).sort(p=>p.rows.length,'desc').map(p=>[p.key,p.rows.length]))
```
居然是filter(p=>p.字段),我之前写的!=Null
因为字段为空时得到的是undefined,而undefined不等于null,同时undefined在判断时隐式转换成false
大佬,我像做一个热力图来统计每天创建的笔记数,现在卡在了不知道怎么获取当日创建的笔记数量这,我想让i等于创建的笔记数要怎么操作呀?不太会JS
```dataviewjs
// // Using multiple colors for different variations of entry //
const calendarData = { year: 2022, colors: { blue: ["#8cb9ff","#69a3ff","#428bff","#1872ff","#0058e2"], // first entry is considered default if supplied
green: ["#c6e48b","#7bc96f","#49af5d","#2e8840","#196127"],
},
entries: []
}
for(let page of dv.pages('"要统计的文件夹"')){
let color = "green"
let i = "当天创建的笔记数"
calendarData.entries.push({
date: page.file.cday,
color: color, i
intensity: i,
})
}
renderHeatmapCalendar(this.container, calendarData)
```dataviewjs
// // Using multiple colors for different variations of entry //
const calendarData = { year: 2022, colors: { blue: ["#8cb9ff","#69a3ff","#428bff","#1872ff","#0058e2"], // first entry is considered default if supplied
green: ["#c6e48b","#7bc96f","#49af5d","#2e8840","#196127"],
},
entries: []
}
for(let page of dv.pages('"200-主笔记"').groupBy(p=>moment(Number(p.file.cday)).format('YYYY-MM-DD'))){
calendarData.entries.push({
date: page.key,
color: "green",
intensity: page.rows.length,
content: page.rows.length
})
}
renderHeatmapCalendar(this.container, calendarData)
```
谢谢大佬还回复我,但很尴尬的是,我没有成功得到我想要的功能 …
我是想像这位作者那样制作一个能跟踪自己每天产出笔记数量的热力图
我将大佬的代码复制进Obsidian中没有得到想要的结果,希望大佬可以帮帮我实现这个功能,太感谢您了~
啊,为什么,哪里出问题了吗
你不修改一下文件夹名吗,还是你也有名叫 200-主笔记
的文件夹
非常感谢~再此基础上进行改造开发了自己想要的功能
噢,这段代码有bug,如果没有对应标题就会出错
```dataviewjs
const term = "日常记录"
const files = dv.pages(`"600-日常"`).sort(p=>p.file.name)
let a = []
for(let i of files) {
let x = await app.vault.readRaw(i.file.path);
x = x.split(/^#+ /m).find(p=>p.startsWith(term));
if(!x) continue
a.push([i.file.name, x.split('\n').slice(1).join('\n')])
}
dv.table(['文件名', term],a)
```
不过有个更好的代码在这
关于日记自定义日期文件名、代办任务排序、内容聚合等问题 - 疑问解答 - Obsidian 中文论坛
非常完美,谢谢
感恩,大佬这种二次渲染的做法真的给了好多灵感,js小白一点点看例子东平西凑弄了一个每日创建文件的热力图(排除日志),也贴出来抛砖引玉一下
dv.span("### **🗄️ 每日创建文件 🗄️**")
const calendarData = {
year: 2023,
intensityScaleStart: 0,
intensityScaleEnd: 10,
colors: {
green: [
"hsl(65, 83%, 88%)",
"hsl(70, 77%, 78%)",
"hsl(80, 62%, 72%)",
"hsl(95, 52%, 66%)",
"hsl(112, 45%, 61%)",
"hsl(125, 43%, 56%)",
"hsl(132, 41%, 49%)",
"hsl(132, 45%, 43%)",
"hsl(132, 49%, 36%)",
"hsl(132, 54%, 29%)",
"hsl(132, 59%, 24%)",
]
},
entries: []
}
for(let page of dv.pages('"Periodic Note"')){
let color = "green"
let intensity = dv.pages('!"Periodic Note"').where(p =>p.file.cday.toISODate()==page.file.name).file.array().length
// 排除日志,这样有日志而未创建文件会显示为0,而无日志直接不显示(默认只要有工作当天必有日志)
calendarData.entries.push({
date: page.file.name,
color: color,
intensity: intensity,
content: await dv.span(`[${intensity}](${page.file.name}.md#🗄️%20当天创建的文件清单)`),
// 预览修改为段落引用
})
}
renderHeatmapCalendar(this.container, calendarData)