Obsidian笔记用DataviewJs插件实现目录中标签按照A-Z排序

效果图示

排序优先级 -> 数字 -> 字母 -> 汉字

结果1
结果2

注意事项:使用该方式前,应先安装dataviewJs插件

const dvPages = dv.pages('"你的目录名称"')

let segs = []
let letters = "*abcdefghjklmnopqrstwxyz".toLocaleUpperCase().split('')
let zh = "阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀".split('')

var isNumber = function(temp){
	let re = /[0-9]/
	return re.test(temp)
}

var isChar = function(temp){
	let re = /[a-zA-Z]/
	return re.test(temp)
}

var isChinese = function(temp){
	let re = /[^\u4E00-\u9FA5]/
	return re.test(temp) ? false : true // 匹配的中文结果为false,非中文结果为true,故此处理
}

letters.forEach((e,i) => {
	let key = (e == "*") ? "0~9" : e
	let curr = {letter: key, data: new Array()}
	dvPages.forEach(b => {
		let tags = b.file.tags
		tags.map(t => {
			let initial = t.charAt(1)
			if(i == 0 && isNumber(initial)){ // 统计数字部分
				curr.data.push(t)
			}else if(i != 0 && isChar(initial) 
				&& e == initial.toLocaleUpperCase()){// 统计字母A-Z部分
				curr.data.push(t)
			}else if(i != 0 && isChinese(initial)){
				if(initial.localeCompare(zh[i]) == -1 && (!zh[i-1] 
					|| zh[i-1].localeCompare(initial) <= 0)){// 统计中文部分
					curr.data.push(t)
				}
			}
		})
	})
	if(curr.data.length > 0){
		curr.data.sort() // 将每个字母对应的数据进行排序
		segs.push(curr)
	}
})
segs.forEach(e => {
	dv.list([e.letter])// 输出,可采用心仪的方式
	dv.list([e.data])
})

觉得帮助到你了呢,可以点个赞支持一下诺~其他问题可以留言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值