过滤以对JSON数据的角度js进行排序

时间:2016-06-28 12:13:01

标签: arrays angularjs json sorting angularjs-filter

我是角度js的新手,并且基本了解过滤器如何在角度js中工作。我很难对jSON数据数组进行排序,因为有各种参数必须对其进行排序。

我的JSON数组采用以下格式:

cnt

同一阵列的其他组合可以是:

[
  {
     type:0,
     emp_name:"xyz",
     connected_on:"9876543210"
  },
  {
     type:1,
     emp_name:"",
     connected_on:"9876543210"
  },
  {
     type:1,
     emp_name:"abcd",
     connected_on:"9876543210"
  },
  {
     type:0,
     emp_name:"pqr",
     connected_on:"9876543210"
  }
]

每个数组都有任何一个 type:1 的对象,并且在排序之后它必须始终是第一个元素。

之后,排序后的数组应该包含 emp_name:“”所有的元素。

在排序数组的最后,它应该包含根据 emp_name排序的所有剩余元素:“无论名称”

所以结果应该如下所示:

[
  {
     type:0,
     emp_name:"",
     connected_on:"9876543210"
  },
  {
     type:1,
     emp_name:"xyz",
     connected_on:"9876543210"
  },
  {
     type:0,
     emp_name:"abcd",
     connected_on:"9876543210"
  }
]

任何人都可以帮我编写过滤器以获得所需的结果。谢谢。如果需要任何其他信息,请告诉我。

此外,connected_on是唯一值,因此我使用跟踪JSONarr.connected_on

2 个答案:

答案 0 :(得分:2)

排序函数需要-10-1作为结果。 -1表示之前,0表示没有变化,1表示之后。

现在你必须根据2个参数进行排序,因此最好有一个算术值。根据优先级获得更高的价值。因此,在以下情况中,我们必须先根据type进行排序,然后再根据emp_name进行排序。

要升序排序,请返回1表示更大,返回-1表示更小。用于降低值的反向。现在将这两个键组合在一起就可以得到这样的结果:



var data=[{type:0,emp_name:"xyz",connected_on:"9876543210"},{type:1,emp_name:"",connected_on:"9876543210"},{type:1,emp_name:"abcd",connected_on:"9876543210"},{type:0,emp_name:"pqr",connected_on:"9876543210"}];

data.sort(function(a, b) {
  var _a = a.type > b.type ? -10 : a.type < b.type ? 10 : 0;
  var _b = a.emp_name > b.emp_name ? 1 : a.emp_name < b.emp_name ? -1 : 0;
  return _a + _b;
});
console.log(data)
&#13;
&#13;
&#13;

答案 1 :(得分:0)

假设你的数组名称为emplist。你可以在这里搜索任何东西您将获得所需的结果。使用表格搜索数据。

<input type="text" ng-model="search">
  <table>
    <th>type</th>
    <th>Emp name</th>
    <th>connected on</th>
    <tr ng-repeat="item in emplist|filter:search">
       <td>{{item.type}}<td>
       <td>{{item.emp_name}}<td>
       <td>{{item.connected_on}}<td>
    </tr>
 </table>