我使用AngularJS orderBY在我的应用程序中对数组进行排序。除了Google Chrome之外,所有浏览器中的数组都已正确排序(鉴于Chrome拥有大量用户,这对我来说真的很令人惊讶)。这里的链接清楚地表明Chrome V8确实存在这种故障。 V8 sorting defect
我想知道orderBy在内部做什么?阅读Angular文档并没有多大帮助。这可能是Angular orderBY代码的问题吗?
主要是,有什么方法可以使Chrome排序正常工作?我希望必须有办法,因为我不愿意相信Chrome有这个问题。
与orderBy上发布的许多其他问题不同,我没有代码问题(引用问题全部),因为所有其他浏览器都显示完美结果。
答案 0 :(得分:1)
注意:此观察结果适用于纯JavaScript排序,而不适用于Angular中的orderBy。
我想澄清这个问题,因为我已经面对这个问题好几个月了,之所以发生这个问题,实际上是在梦中来到我身边。当IE和Mozilla排序时,两个元素匹配,维持现有订单。当Chrome排序时,如果两个或多个元素匹配,则不会保留生成的顺序。这意味着如果您对一个键上的数组进行排序,然后在另一个键上再次对其进行排序,则第一个键的结果将丢失。
以上链接" V8排序缺陷"提供了注释4中的解决方案。解决方案是始终在单个传递中进行排序,并且在sort函数中具有if语句的层次结构,用于处理元素相等时要执行的操作。说实话,这比多次传递排序更有效。
马林