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

如下的代码:dv.pages (‘“9文献笔记/fn”’).where (b=> b.编码>0).length 想统计编码不为空的内容,先用函数:

dv.pages (‘“9文献笔记/fn”’).where (b=> b.编码.length()>0).length 报错,不知道,大神能否帮忙给我一个案例

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

这个是什么意思呢?

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

这样应该可以

不加 !=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 才能得到正确结果,我觉得需要再问问。