AngularJS: 如何编写升序排序过滤器

AngularJS: How to write ascending sort filter

我正在学习 AngularJS 并作为尝试编写升序排序过滤器的练习:

这是我的 html 文件:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title></title>
  <script src="../Scripts/angular.min.js"></script>
  <script src="../Scripts/Controllers/app.js"></script> 
</head>
<body ng-app="myApp">
    <ul ng-init="names = ['Peter','Anton','John']">
       <li ng-repeat="name in names | sortAscending ">
           <span>{{name}}</span>
       </li>
   </ul>
</body>
</html>

这是我的过滤器:

app.filter("sortAscending", function () {
    return function (input) {
        var result = [];
        for (var i = 0; i < input.length; i++) {
            if (input[i] > input[i + 1]) {
                result.push(input[i]);
            }
        }

        return result;
    }
});

我觉得关于比较值的循环有问题。

我做错了什么?

orderBy 怎么样:

<ul ng-init="names = [{name:'Peter'}, {name:'Anton'}, {name: 'John'}]">
    <li ng-repeat="name in names | orderBy:'+name' ">
        <span>{{name}}</span>
    </li>
</ul>

在名称前加上 + 号表示升序,或者 - 表示降序。

参考:orderBy

编辑:正如另一个答案所暗示的,请不要使用 ng-init 来声明 variables/objects。正如您在 AngularJS 文档中看到的那样,可以使用一个简单的控制器,不仅用于大多数目的,更重要的是用于练习目的。

三件事:

  1. 您的过滤器没有 return 任何东西(缺少 return 语句)

  2. ng-init 应该只用于别名,在其中声明变量不是一个好习惯。在您的示例中,您应该使用 ng-init 将过滤器应用于数组,但数组本身应该在控制器中声明。

  3. 您的排序算法不工作。要对这样的简单数组进行排序,您可以简单地使用 javascript sort() 方法。

这是一个工作中的 plunker,修正了三点:

http://plnkr.co/edit/Qv9TDonFmpJsnIjx3dff?p=preview

 <ul  ng-init="sorted_names = (names | sortAscending)">
       <li ng-repeat="name in sorted_names ">
           <span>{{name}}</span>
      </li>
 </ul>

编辑:我猜您想将此理解为一种练习形式,因此我的解决方案仅针对您尝试解决问题的方式。像其他提到的那样,您确实可以使用 orderby 过滤器最终使这更容易。