我有一个由数组排序的角度表。它的工作方式类似于第二级依赖于第一级,第三级依赖于第二级等等。
例如:
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>
答案 0 :(得分:1)
这个解决方案是普通的Javascript。
您可以应用自定义排序,按长度递增对不等长度数组进行排序,其余按最右侧部分降序排序。
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;