dataviewjs 如何将统计属性“编码”不为空的数量?

不加 !=null 也是 ok 的

可以运行, :grinning:

  • 如果要对编码进行统计长度>0 可以用length函数么?

  • 如果要对编码转化为数字>0,可以用户number函数么?

可以,前提是确保笔记有编码这个属性,由于filter或这个where要对所有元素都调用,比如说你之前写的 b.编码.length>0,如果有的b.编码不存在,那自然也没有length属性,就报错了

我用错了,我本来想用 b.编码!==null的,本来想的复杂一点的,这个就和 b.编码 不一样了,它会过滤出 yaml 区有编码这个属性,但是是空着的笔记,就像这样

---
编码: 
---

主要是我自己有一些模板生成的笔记,有些属性是空着后面慢慢补的,要找出它们(没有这个占位的就不找)。就先入为主的以为别人也要这么用来着。

编码我是用在文章中中使用::赋值的
有一些笔记是没有编码的。是因为这个才报错的么


var i = [dv.pages(`"9文献笔记/fn"`).length,dv.pages ('"9文献笔记/fn"').filter(b=> b.编码.length>0).length] 
dv.paragraph(`闪念笔记: **${i[0]}** 个`) 
dv.paragraph(`已编码笔记: **${i[1]}** `)

你要用 === 喔,提醒一下:null==undefined 是 true,null===undefined 是false

是啊,就是这个原因,要先存在编码,才能编码.length,也可以 b=> b.编码 && b.编码.length>0

搞定,b.编码 && b.编码.length>0的 496是正确的


var i = [dv.pages(`"9文献笔记/fn"`).length,dv.pages ('"9文献笔记/fn"').filter(b=> b.编码!=null).length,dv.pages ('"9文献笔记/fn"').filter(b=> b.编码 && b.编码.length>0).length] 
dv.paragraph(`闪念笔记: **${i[0]}** 个`) 
dv.paragraph(`已编码笔记: **${i[1]}** `)
dv.paragraph(`已编码笔记: **${i[2]}** `)

两个等号比较会产生隐式转换,比如 true==1 中,true 会转换成 1,然后 1==1 输出 true;如果是 true===1,就是 false

b.编码 && b.编码.length>0,

编码::
后面是空格还是null呢? 如果没有空格,

length没有大于>0,不会计算的

结果就是0啊. length>0,没有满足啊

en, 第三个统计是的编码不为空的情况

可能我表述不清楚。两个笔记,一个有 编码:: 12,不为空;一个仅有 编码::,为空。第三个统计是的编码不为空的情况,应该有 1 个笔记,即 编码:: 12 的笔记,而不是 0 个。

image

我把定义重新定义了一下:


var i = [dv.pages(`"9文献笔记/fn"`).length,dv.pages ('"9文献笔记/fn"').filter(b=> b.编码!=null).length,dv.pages ('"9文献笔记/fn"').filter(b=> b.编码 && b.编码.length>0).length] 
dv.paragraph(`闪念笔记: **${i[0]}** 个`) 
dv.paragraph(`有编码笔记(包含有编码为空的笔记): **${i[1]}** `)
dv.paragraph(`已编码笔记(仅包括不为空的笔记): **${i[2]}** `)

image

那么我猜测你是不是 YAML 区和正文都有“编码”这个属性。你看,只要有两个“编码::”,哪怕都为空也会被统计到。

image

有一说一,应该避免重复属性的出现,但是它确实.length>0
image
image

主要是一般如果没有重复定义属性的话,用 dv.pages(`"9文献笔记/fn"`).filter(b=> b.编码).length 应该已经得到正确结果了,但楼主要用 b=> b.编码 && b.编码.length>0 才能得到正确结果,我觉得需要再问问。

前面说了原因, 单独使用:b.编码.length>0会报错,有一部分笔记没有编码

是说用 .filter(b=> b.编码).length 就好啦。
不是 .filter(b=> b.编码.length>0).length

在没有重复定义属性的情况下,.filter(b=> b.编码).length 直接返回的就是编码不为空的值。
不包括有 编码:: 但没有值的。
也不包括没有 编码:: 的。

只是楼主你截图的结果和一般情况不一样,所以我猜可能你的笔记结构和一般的也不一样。

一般用不到 .length>0 这种筛选,而且这种筛选是有其他问题的,比如 #25 提到的情况。

我突然想到,避免重复属性的出现是因为我记得之前多个重复属性会覆盖,你也不知道会得到哪个结果,现在多个属性会构成列表,那不就方便结构化笔记了吗,比如这样

## A
性质:: 
优点:: 
缺点:: 
## B
性质:: 
优点:: 
缺点::