【问题标题】:OrderBy is sorting differently in Chrome than other browsersOrderBy 在 Chrome 中的排序方式与其他浏览器不同
【发布时间】:2016-09-08 11:18:09
【问题描述】:

我注意到 Chrome 中的 orderBy 与其他浏览器中的排序不同。

我正在为 Angular 1.3 中的一个项目写作。

Chrome 排序:

IE 10 排序:

对于特定的浏览器没有特殊的逻辑,两个数组完全一样。

谓词明确定义:

$scope.predicate = 'style';
$scope.reverse = true;

我的 ng-repeat 看起来像这样:

<tr ng-repeat="line in model.resultList | orderBy:predicate:reverse">

我的代码没有什么特别或不同的地方。然而,“大小”是字符串(例如,大小:“8-”,...,大小:“6”,...)。为什么这种排序在 Chrome 上与在其他所有浏览器上完全不同?

我所有的结果都是从后端按样式 # 分组排序的,然后按升序排列。当在 Angular 上设置主要排序时,在本例中为 Style,Chrome 正在混合已经排序的大小。请参阅下面的 Plnk(在 Chrome 和 IE/FireFox 中打开以查看差异)

http://plnkr.co/edit/6TO8pZZ8jZ8Tytw6wHpQ?p=preview

【问题讨论】:

  • 什么是样式属性?你能提供演示吗?不清楚什么是排序属性。
  • 这是因为 chrome “速度很快”,因此不关心排序,而是进行一些改组,以便您知道 id 并没有完全忽略您的命令。
  • 无法在此 example 中复制
  • 您不必这样做——众所周知,Chrome (webkit) 并不真正支持排序,Fx (geckos) 几乎就在那里,但并不完全支持。唯一真正支持排序的浏览器是 MSIE。
  • 我很困惑。我在您的数据中没有看到名为“样式”的属性,如果您将谓词更改为“大小”,它将按您的“大小”属性正确排序。

标签: javascript angularjs google-chrome sorting


【解决方案1】:

没有错。由于您是按其他字段排序 - 大小可以以任何方式改组。 orderBy 依赖于浏览器的内置排序功能 (source)。浏览器实现可能会有所不同。而且排序不应该是稳定的(MDNES2015 Standard section)。

如果您想实现一致的行为,请使用按多个字段排序。喜欢

orderBy:[predicate, 'size']:reverse

【讨论】:

  • 作为补充,按照您的解释,sort() 即使在同一个浏览器中也会产生意想不到的结果。
  • @Andrey 非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
  • 2012-08-10
相关资源
最近更新 更多