javascript - Angular 数据表中括号内数字的排序

标签 javascript angularjs angular-datatables

我正在使用 Angular datatables根据网络服务响应填充我的表。我的网络服务返回一个如下所示的 json

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

我能够将 JSON 数组绑定(bind)到下表中的 $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

谁能建议我需要应用的逻辑是什么?

最佳答案

您可以使用列渲染函数。当数据表需要 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>

关于javascript - Angular 数据表中括号内数字的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29475966/

相关文章:

javascript - 经典 ASP 在页面之间传递值

javascript - highcharts如何覆盖重置缩放按钮事件

javascript - 如何将数据从对话框传回angularjs中的 Controller ?

javascript - AngularJS - 使用命名空间解析 JSON feed

javascript - 在 $http.post 中使用参数不起作用

javascript - 如何实现 Angular 数据表中的动态列隐藏?

javascript - 禁用列排序不适用于多个 angularjs 数据表

javascript - 如果正在更新应用程序缓存,则阻止 ajax 调用

javascript - Bootstrap-UI - 如何在不操作 URL 的情况下将 TemplateUrl 用于选项卡 View ?

angular - Angular7 中的 ElasticSearch Post 调用抛出 400 错误