Native Array.prototype.sort()和_.sortBy()以不同方式对值进行排序

时间:2017-07-16 08:16:13

标签: javascript arrays sorting lodash

我正在尝试基于整数属性对对象数组进行排序。当使用lodash的方法_.sortBy()时,顺序是预期的,但是当我使用内置方法时,它是不对的。

点击此处的代码段:jsbin link。这不是最具可读性的例子。我无法弄清楚我编写的排序方法有什么问题。具有延迟值0的对象应该在数组中保持其原始顺序,但本机排序方法不会发生这种情况。如果我要编辑我的示例以便更清晰,请在评论中告诉我。

1 个答案:

答案 0 :(得分:4)

您的排序方法似乎没有任何问题。但是,您的期望可能不完全正确。

_.sortBy()使用稳定的排序算法。如果它遇到彼此相等的元素(如0延迟值),它会按照它们找到的相同顺序保留元素。 http://underscorejs.org/#sortBy

另一方面,

Array.prototype.sort()的算法不能保证稳定。

  

如果compareFunction(a,b)返回0,则保持a和b相对于彼此保持不变,但是对所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort