AngularJS使用空值对列表进行排序

AngularJS使用空值对列表进行排序,angularjs,Angularjs,我有一个scope对象,它有一个包含null值的列表,我想对这个列表进行双向排序,但是null值必须始终位于末尾。我可以很容易地将对象分成2个,一个带null,一个不带null,然后在末尾粘贴null列表。但是有没有更有效的方法来做到这一点 例如: [1,null,5,7,2,null] 分类: ASD: 1,2,5,7,null,null DESC: 7,5,2,1,null,null 如果您只想对数组进行排序,JavaScript有方法array.sort。这需要一个比较器函数 您可以

我有一个scope对象,它有一个包含null值的列表,我想对这个列表进行双向排序,但是null值必须始终位于末尾。我可以很容易地将对象分成2个,一个带null,一个不带null,然后在末尾粘贴null列表。但是有没有更有效的方法来做到这一点

例如:

[1,null,5,7,2,null]
分类:

ASD: 1,2,5,7,null,null

DESC: 7,5,2,1,null,null

如果您只想对数组进行排序,JavaScript有方法
array.sort
。这需要一个比较器函数

您可以实现两个这样的函数,一个用于升序排序,另一个用于降序排序。在这两个函数中,可以根据需要处理null。见文件


如果您使用的是angularjs filter,它也需要一个比较器函数,因此类似的方法可能会起作用。

如果不替换空值,则无法orderby,当与ng-repeat结合使用时,它会中断,因为在项目列表中不能有重复项。据我所知,重复问题与ng repeat而不是orderby fiter有关。为什么orderby在重复值上失败?必须添加“与ng repeat结合使用”-本身,使用orderby是可以的,但是在显示项目时会遇到问题。然而,我认为对于所描述的情况,这是正确的答案。如果在repeater表达式的末尾指定
track by$index
,则在
ngRepeat
中可以有重复项。问题是orderBy谓词用于返回要排序的值,而其本身不是一个比较函数,即所描述的问题
null
值始终位于列表的底部/末尾,但未寻址。下面是一个显示该行为的扑通声: