【问题标题】:Filter to sort in angular js for JSON data过滤以在角度 js 中对 JSON 数据进行排序
【发布时间】:2016-10-30 18:22:02
【问题描述】:

我是 Angular js 的新手,并且对过滤器在 Angular js 中的工作方式有基本的了解。我坚持对我的 jSON 数据数组进行排序,因为它必须根据各种参数进行排序。

我的 JSON 数组是这种格式:

[
  {
     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:0,
     emp_name:"",
     connected_on:"9876543210"
  },
  {
     type:1,
     emp_name:"xyz",
     connected_on:"9876543210"
  },
  {
     type:0,
     emp_name:"abcd",
     connected_on:"9876543210"
  }
]

每个数组都会有任何一个对象,其中 type:1 将在那里,并且在排序后它必须始终是第一个元素。

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

在排序后的数组的最后,它应该包含所有剩余的元素,按照 emp_name:"whatever names"

排序

所以结果应该如下所示:

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

谁能帮我编写过滤器以获得所需的结果。提前致谢。如果需要任何其他信息,请告诉我。

connected_on 也是唯一值,所以我使用 track by JSONarr.connected_on

【问题讨论】:

标签: arrays angularjs json sorting angularjs-filter


【解决方案1】:

假设您的数组名称为 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>

【讨论】:

  • 我不需要搜索,我只需要在显示时使用在我的控制器中创建的过滤器对元素进行排序。
【解决方案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)

【讨论】:

  • 谢谢,它就像魅力一样,我错过了把它 -10 的诀窍
  • 很高兴,能够帮助到您。 :-)
猜你喜欢
  • 2019-11-09
  • 1970-01-01
  • 2018-03-08
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
相关资源
最近更新 更多