一个从 YAML 中提取信息的简单表格大致是这样的:

需要插入的代码:

```dataviewjs
const pages = dv.pages('"2. Areas/Занятие спортом/Динамика веса"')
  .where(p => p.Вес && p.date)
  .sort(p => p.date);

let rows = [];
let prevWeight = null;
const goal = 80;

for (let p of pages) {
  const date = new Date(p.date).toLocaleDateString();
  const weight = p.Вес;
  let diffDisplay = "–";
  let toGoal = `${(goal - weight).toFixed(1)} kg`;

  if (prevWeight !== null) {
    const diff = weight - prevWeight;
    if (diff > 0) {
      diffDisplay = `🟢 +${diff.toFixed(1)}`; // gaining weight = good
    } else if (diff < 0) {
      diffDisplay = `🔴 ${diff.toFixed(1)}`;  // losing = bad
    } else {
      diffDisplay = "➖ 0";
    }
  }

  rows.push([date, weight, diffDisplay, toGoal]);
  prevWeight = weight;
}

dv.table(["📅 Date", "⚖️ Weight (kg)", "📈 Difference", "🎯 To goal (80 kg)"], rows);```

→ const pages = dv.pages(‘“2. Areas/Занятие спортом/Динамика веса”’) —— 换成你自己存放带 YAML 笔记的路径 → 把最后三个单引号字符移到新的一行


🧠 写给想更深入理解这段代码的人:

这段代码可不只是一张表格,它是 Obsidian 里的智能体重追踪器。它会显示:

  • 记录日期;

  • 当前体重;

  • 与上一次记录相比的体重变化;

  • 距离目标(比如 80 公斤)还差多少。

而且这一切都是自动完成的,不需要 Excel 或第三方应用。


dataviewjs 和普通的 dataview 有什么不同?

普通的 dataviewdataviewjs
写法就像在 Excel 里一样:只用 table、sort、filter。使用 JavaScript,这意味着你可以实现更复杂的逻辑:比较、计算,甚至加入情绪。
适合简单的列表和表格。适合高级追踪器、计算和可视化。
无法计算数值之间的差值。可以比较、计算差值,甚至根据结果输出表情符号。

代码逐步讲解

const pages = dv.pages('"2. Areas/Занятие спортом/Динамика веса"')
  .where(p => p.Вес && p.date)
  .sort(p => p.date);
  • 我们获取 “Weight dynamics”(体重变化) 文件夹里的所有笔记。

  • 进行筛选:只要同时包含 weight 和 date 的笔记。

  • 按日期排序,让记录井然有序。


let rows = [];
let prevWeight = null;
const goal = 80;
  • rows —— 表格的各行数据会收集在这里。

  • prevWeight —— 我们会记住上一次的体重,用来和当前体重做对比。

  • goal —— 你的目标(比如 80 公斤)。代码会显示还差多少。


for (let p of pages) {
  const date = new Date(p.date).toLocaleDateString();
  const weight = p.Вес;
  • 从每条笔记中获取日期和体重。

  • 把日期转换成易读的格式(比如“27.05.2025”)。


let diffDisplay = "–";
let toGoal = `${(goal - weight).toFixed(1)} kg`;
  • diffDisplay —— 自上次以来体重发生了什么变化。

  • toGoal —— 距离目标还差多少公斤。


if (prevWeight !== null) {
  const diff = weight - prevWeight;
  if (diff > 0) {
    diffDisplay = `🟢 +${diff.toFixed(1)}`;
  } else if (diff < 0) {
    diffDisplay = `🔴 ${diff.toFixed(1)}`;
  } else {
    diffDisplay = "➖ 0";
  }
}
  • 比较体重:是上升了、下降了,还是没有变化。

  • 并加上颜色和表情符号:

    • 🟢 增重了——很好!

    • 🔴 减轻了——也许你该多吃点 😅

    • ➖ 没变化——很稳定!


rows.push([date, weight, diffDisplay, toGoal]);
prevWeight = weight;
  • 把所有内容添加到表格中。

  • 记住当前体重,用于和下一次对比。


dv.table(["📅 Date", "⚖️ Weight (kg)", "📈 Difference", "🎯 To goal (80 kg)"], rows);
  • 输出一张漂亮的表格:

    • 日期、

    • 体重、

    • 变化、

    • 距离目标还差多少。


💥 最终效果

你会在 Obsidian 里得到一张表格,它能够:

  • 计算进度;

  • 显示你在哪些时候减重、哪些时候增重;

  • 激励你继续坚持。

这是用于自我提升和追踪进度的绝佳工具。而且是你亲手做出来的——不用 Excel,不用其他应用,全靠 Obsidian。