tabulator - Tabulator 的“时间”排序器无法以 hh:mm:ss 格式正确排序
问题描述
我已经加载了 moment.js 并且 datetime 排序工作 - 这似乎需要一个格式化程序和一个排序器 FWIW。但是对于“时间”排序,我只是试图让数据以这种格式的字符串形式出现:
“hh:mm:ss”
然后,使用“时间”排序器,我这样配置它:
{'field': 'wall_time', 'title': 'wall_time', 'sorter': 'time', 'sorterParams': {'format': 'hh:mm:ss'}}
问题是,我得到不正确的排序顺序:
有什么办法可以进一步调试吗?
附录:请注意,我的列和行是在 Ajax 调用中创建表后加载的 - 这可能会对排序行为产生影响:
table.setColumns(response.cols);
table.setData(response.rows);
解决方案
因为您的时间不是有效时间,所以它们不能转换为标准的 24 小时时间。内置分拣机不适合您。你必须创建你自己的。您可以在此处阅读有关自定义排序器的更多信息, http: //tabulator.info/docs/4.6/sort#func。
这是我相信对你有用的东西。 https://jsfiddle.net/nrayburn/6wygod1c/29/
一般的想法是更改您的列以使用您的自定义排序器。创建一个自定义排序器,返回被比较的两个值之间的差异。
{
field: 'time',
name: 'Time',
sorter: customSorter
}
function customSorter(a, b){
const aArray = a.split(':');
const bArray = b.split(':');
let diff = 0;
for (let i = 0; i < 3; i++){
if (aArray[i] !== bArray[i]){
diff = bArray[i] - aArray[i];
break;
}
}
return diff;
}
因为这使用了自定义排序器,所以您不再需要包含 moment.js。
推荐阅读
- babeljs - 我如何告诉 Babel 不要关心它不理解的东西?
- sql - 如何在 Oracle 中使用字符串选择表?
- python - 在 Python 中,如何创建别名?我想将“elif”重命名为“elseif”
- ios - 从重叠视图触发 UITapGestureRecognizers
- php - 如何从自定义路由发送来自 Laravel 5.7 的电子邮件验证电子邮件
- java - 什么是正确的正则表达式模式?
- c# - Newtonsoft.Json 在长树中的用法
- pine-script - 如何在较小的时间范围内计算较大时间范围内的指标值
- c# - 如何在 asp.net core 2.0 中更改路由控制器
- react-native - 反应原生视频不显示 iOS 上视频列表的预览