在数组中的项目中按顺序排序

时间:2016-01-11 10:07:08

标签: javascript angularjs

我有一个由数组排序的角度表。它的工作方式类似于第二级依赖于第一级,第三级依赖于第二级等等。

例如:

A是B的父,B是C的父。

orderby工作正常,直到我要反转它,然后我想只有最后一个孩子(在上面的例子C中)重新排序,并且A和B都保持不变。

有可能做到这一点吗?怎么样?

在我的下面的plunker中,我想只在单击按钮时更改C行的顺序。

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

cmd /c (start /d "/path/to/dir" bash --login) && exit

JS:

<!doctype html>
<html lang="en">
   <head>
      <meta charset="UTF-8">
      <title>Example - example-example105-production</title>
      <link href="style.css" rel="stylesheet" type="text/css">
      <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-rc.0/angular.min.js"></script>
      <script src="script.js"></script>
   </head>
   <body ng-app="orderByExample">
      <div ng-controller="ExampleController">
         <table class="friend">
            <tr>
               <th>
                  <button ng-click="toggle_order()">switch order</button>
                  <span class="sortorder" ng-show="predicate === 'group'" ng-class="{reverse:reverse}"></span>
               </th>
            <tr ng-repeat="friend in friends | orderBy:predicate:reverse">
               <td>{{friend.group}}</td>
            </tr>
         </table>
      </div>
   </body>
</html>

1 个答案:

答案 0 :(得分:1)

这个解决方案是普通的Javascript。

您可以应用自定义排序,按长度递增对不等长度数组进行排序,其余按最右侧部分降序排序。

&#13;
&#13;
var data = [
        { group: ['A', 'B1', 'C2'] },
        { group: ['A', 'B1'] },
        { group: ['A', 'B1', 'C1'] },
        { group: ['A'] },
        { group: ['A', 'B1', 'C3'] }
    ];

data.sort(function (a, b) {
    var l = Math.min(a.group.length, b.group.length),
        r = a.group.length - b.group.length;

    while (!r && l--) {
        r = b.group[l].localeCompare(a.group[l]);
    }
    return r;
});

document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');
&#13;
&#13;
&#13;