Javascript AngularJS-ngOptions:如何按组名排序,然后按标签排序

Javascript AngularJS-ngOptions:如何按组名排序,然后按标签排序,javascript,angularjs,angularjs-filter,ng-options,angularjs-orderby,Javascript,Angularjs,Angularjs Filter,Ng Options,Angularjs Orderby,假设我有以下格式的数据数组: var data = [{group:GroupA, label: BB}, {group:GroupB, label: DD}.....]. 我的装订是这样的: <select data-ng-options="c as c.label group by c.group for c in data"></select> 我知道我可以使用orderByAngular过滤器,但这并不是我真正需要的方式。我的猜测是,我必须编写一个自定义过滤器

假设我有以下格式的数据数组:

var data = [{group:GroupA, label: BB}, {group:GroupB, label: DD}.....].
我的装订是这样的:

<select data-ng-options="c as c.label group by c.group for c in data"></select>

我知道我可以使用
orderBy
Angular过滤器,但这并不是我真正需要的方式。我的猜测是,我必须编写一个自定义过滤器,手动按我想要的方式对列表排序,但我想知道是否有更简单的方法来完成这项任务

看起来,
orderBy
的工作方式与您想要的完全一样

只需使用表达式并在末尾添加orderBy:

c as c.label group by c.group for c in data | orderBy:'label'
这将首先根据每个项目的
标签
属性的值对
数据
数组进行排序,然后对它们进行分组。因为数据的顺序正确,所以每个组都会正确排序


请注意初始数组是如何按向后顺序定义的,但在select中的每个组中是如何正确排序的。

orderBy
可以采用多个参数的数组进行排序。因此,您可以:

c as c.label group by c.group for c in data | orderBy:['group','label']

这实际上不能保证A组在B组之前。如果A组只包含“GG,HH,II”,则顺序将颠倒。我想我举了一个不好的例子事实上,我可以先按组排序,如果两组是相同的,然后按标签值排序。谢谢。我不知道您可以将数组传递给orderBy。我想我忽略了angularjs文档中的这一部分。但至少我知道有一个更简单的方法,因为这是一个非常常见的用例。你能用这个方法指定排序顺序吗?i、 e.我想按组asc排序,然后标记desc?@RossJones是的,您可以将
['group','label']
更改为
['+group','-label']
对我来说非常有效。谢谢
c as c.label group by c.group for c in data | orderBy:['group','label']