对角度数据表中括号内的数字进行排序

Sorting of numbers within brackets in angular datatables

本文关键字:数字 排序 数据表      更新时间:2023-09-26

我使用Angular数据表来根据Web服务响应填充我的表。我的Web服务返回一个类似的json

[
 {
  "id": 1,
  "name" : "abc",
  "count": "(20)"
 },
 {
  "id": 2,
  "name" : "abc2",
   "count": "20"
 },
{
  "id": 3,
  "name" : "abc3",
  "count": "(30)"
 }
] 

我能够将JSON数组绑定到下表中的$scope变量

<table  datatable="ng" dt-options="dtOptions" dt-column-defs="dtColumnDefs">
     <thead>
             <tr> 
                 <th>id</th>
                 <th>name</th>
                 <th>count</th>
             </tr>
     </thead>
     <tbody ng-repeat= "item in items">
         <td> {{item.id}} </td>
         <td> {{item.name}} </td>
         <td> {{item.count}} </td>
     </tbody>
 </table>

idname列按升序和降序正确排序,但count栏不按数字排序。相反,它在排序和排序时考虑了"("。我希望计数列的排序结果是

在上升中

20

(20)

(30)

现在我得到了升序

(20)

(30)

20

有人能提出我需要应用的逻辑是什么吗?

您可以使用列渲染函数。当任何dataTables需要count列的值,并且希望将该值用于sort列时,则返回一个包含列数据的数字部分的键入数字:

$scope.dtColumnDefs = [
   DTColumnDefBuilder
     .newColumnDef(2)
     .withOption('type', 'number')
     .renderWith(function(data, type, full) {
        if (type == 'sort') { 
           var value = data.match(/'d+/);
           if (value == null) {
              return 0
           } else {
              value = parseFloat(value[0]);
           } 
           return value.toString().length != data.length ? value+0.0001 : value;
        } 
        return data              
    })
]; 

在这里,我将0.0001添加到包含非法字符的值中,如(,这样我们可以确保值以正确的顺序显示,即所有20在所有(20)之前(或之后)被分组为

演示->http://plnkr.co/edit/Zyp0yphHfxnElEjMMOh2?p=preview


注意:我会迭代<tr>的,而不是<tbody>:

<tbody>
    <tr ng-repeat="item in items">
        <td> {{item.id}} </td>
        <td> {{item.name}} </td>
        <td> {{item.count}} </td>
    </tr>
</tbody>