0

以下是从 A 到 Z 的排序标准:1) 特殊字符 2) 数字 3) 字母

For example:-

$scope.cards = ["815 BRAZOS ST AUSTIN TX 78701","7745 CHEVY CHASE DR AUSTIN TX 78752","701 BRAZOS ST AUSTIN TX 78701","555 ROUND ROCK WEST DR ROUND ROCK TX 78681","400 W 15TH ST AUSTIN TX 78701"]

Expected result after sorting:-

400 W 15TH ST AUSTIN TX 78701
555 ROUND ROCK WEST DR ROUND ROCK TX 78681
701 BRAZOS ST AUSTIN TX 78701
815 BRAZOS ST AUSTIN TX 78701
7745 CHEVY CHASE DR AUSTIN TX 78752

我想使用 AngularorderBy过滤器来实现这一点。和 JS 自定义排序函数一样,我们有两个参数,通过操作我们可以返回 >0、<0 和 0 来实现自定义排序。

我的尝试

<div ng-controller="MyCtrl">
  <ul ng-repeat="card in cards | orderBy:myValueFunction">
      <li>{{card}}</li>
    </ul>
</div>

JS

var myApp = angular.module('myApp', []);

function MyCtrl($scope) {
    $scope.cards = ["815 BRAZOS ST AUSTIN TX 78701","7745 CHEVY CHASE DR AUSTIN TX 78752","701 BRAZOS ST AUSTIN TX 78701","555 ROUND ROCK WEST DR ROUND ROCK TX 78681","400 W 15TH ST AUSTIN TX 78701"]

    $scope.myValueFunction = function(card,card1) {
        console.log(card);
        console.log(card1);
        return card;
    } 
}

JSfiddle 链接

谢谢

4

1 回答 1

4

根据文档,您的函数应该返回一个值,该值将用于使用标准比较运算符(<、>、=)进行排序。

因此,在您的情况下,您的函数应该返回一个值,这将确定排序。对于您的情况,您需要放置一些高级逻辑来产生这样的价值。

对于简单的示例(按第一个数字排序),您会得到:

$scope.myValueFunction = function(card) {
        return card.split(' ')[0]|0;
}

至少你会在你的小样本中得到你所要求的,见这里:http: //jsfiddle.net/zjvsu/529/

更新

如果您想像标准 javascript 排序自定义函数一样比较两个值,那么您将必须使用自己的过滤器来返回排序数组。

于 2014-08-27T11:23:16.187 回答