按字符串值重复排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按字符串值重复排序相关的知识,希望对你有一定的参考价值。

我想知道是否可以通过基于字符串的列表进行排序,例如

我希望所有的Bear都能在我的ng-repeat中首先基于item.type

数据:

$scope.Reindeers = [{
    "name": "Vixen",
    "type": "Bear"
},
{
    "name": "Prancer",
    "type": "Dog"
},
{
    "name": "Dancer",
    "type": "Cat"
},
{
    "name": "Rudolph",
    "type": "Bear"
}]

AngularJS例如

<div class="weird-reindeers" ng-repeat="Deer in Reindeers | orderBy: 'type == Bear'"></div>
答案

orderBy的论点可以是一个函数:https://docs.angularjs.org/api/ng/filter/orderBy#orderBy-arguments

编写一个返回用于排序的值的函数。最高优先级应返回最低值:

$scope.orderByBears = function(item) {
  switch(item.type) {
    case "Bear":
      return -10;
    /*case "Dog":
      return -5;*/
    default:
      return 0;
  }
}

然后使用它作为你的orderBy函数:

<div class="weird-reindeers" ng-repeat="Deer in Reindeers | orderBy: orderByBears"></div>

https://jsfiddle.net/jnokyfx9/2/

另一答案

最简单的解决方案是使用默认的字母顺序。

所以,因为熊以b开头,所以只需写:

 <div class="weird-reindeers" ng-repeat="Deer in Reindeers | orderBy: 'type'">{{Deer}}</div>

见:https://jsfiddle.net/nfje5qo2/6/

另一答案

由于您的数组以key:value方式存储。这很容易排序。您无需编写任何其他方法或功能。只需在html中以Angular术语放置一个名为filter的管道,如下所示。

<div class="weird-reindeers" ng-repeat="Deer in Reindeers | orderBy: 'type'">{{Deer}}</div>

以上是关于按字符串值重复排序的主要内容,如果未能解决你的问题,请参考以下文章

按属性值对对象列表进行排序[重复]

按升序对groupby中的浮点值进行排序[重复]

按特定数据对字符串进行排序[重复]

将javascript数组中的重复值分组在一起,然后按值名称升序对这些组进行排序

按度量值对重复的面板进行排序

JavaScript按属性值对字典进行排序[重复]