datatables - 为数据表中的自然排序添加例外
问题描述
有没有办法向自然排序插件添加异常,以便它忽略诸如c.
, [
, ]
,之类的东西?
?
这是我的数据示例:
161?
1604
[1563
] 1476
我想要排序的 asc。输出为:
C。1476
[1563]
1604
161?
现在我得到的是所有的数字,然后是字符串[
。
我的初始化代码:
<script type="text/javascript" src="//cdn.datatables.net/plug-ins/1.10.24/sorting/natural.js"></script>
$('#sourcesList').DataTable({
"paging": false,
"columnDefs": [
{ type: 'natural-nohmtl', targets: '_all' }
],
[...]
PS:这是我在野外的数据。
解决方案
自然排序选项处理您可以合理预期在“现实世界”中遇到的某些类型的数字数据 - 例如具有不同千位分隔符的数字,或不同位置的不同类型的货币符号 - 或“第一个”, “第 2 次”“第 3 次”等等。不要在这些确切的例子中引用我,因为我没有详细查看那个附加组件。但这是总体思路。
问号之类的项目-我不希望该插件能够处理这些问题。方括号中的项目 - 同样的事情。
鉴于您在评论中的澄清,我认为您不需要或不想要这个附加组件。
相反,您可以使用具有 DataTables 能力的列渲染器来存储不同版本的值- 用于显示、排序和过滤。
var dataSet = [ ["161?"], ["1604"], ["[1563]"], ["c. 1476"] ];
$(document).ready(function() {
$('#example').DataTable( {
data: dataSet,
columnDefs: [ {
type: "natural-nohmtl",
targets: [ 0 ],
title: "My Data",
"render": function ( data, type, row, meta ) {
if ( type === 'sort' ) {
//return parseInt(data.replace(/\D/g, '')); // numbers as numbers
return data.replace(/\D/g, ''); // numbers as strings
} else {
return data;
}
}
} ]
} );
} );
这保存了每个值的版本,其中所有非数字从值中剥离,使用replace(/\D/g, '')
. 数据的这个更改版本存储为排序时将使用的值。未更改的版本是用户将看到的。
我的结果:
这是将数字视为文本的情况。
您可以取消注释已注释掉的return
语句以获取数字作为数字。
然而...
这种从数据中去除非数字的粗略方法符合您问题中的狭窄示例,但对于您期望处理的所有数据而言,它可能还不够。因此,您可能需要细化“替换”逻辑。
但是渲染功能应该更普遍地满足您的需求。
推荐阅读
- javascript - 检查数据是否在 json 对象中可用
- azure-devops - 如何通过 DevOps API 获取特定存储库的 Azure DevOps 版本?
- ibm-cloud - IBM Terraform 提供程序的问题:ibm_service_instance
- hibernate - Hibernate:自引用,但具有附加信息和两个方向
- powershell - 我们如何交换通过 | 分隔数据的文本文件中的列?
- r - 我可以将 dplyr 输出作为值,而不是作为数据框吗?
- unit-testing - DevOps 如何测试管道变量
- php - 无法在 cpanel 中路由 yii2 应用程序
- haskell - 如何定义一个简单的 RIO LogFunc 而不用括号执行
- apache - 如何通过反向代理将 IP 作为远程主机名转发到 Apache?