我正在尝试基于整数属性对对象数组进行排序。当使用lodash的方法_.sortBy()
时,顺序是预期的,但是当我使用内置方法时,它是不对的。
点击此处的代码段:jsbin link。这不是最具可读性的例子。我无法弄清楚我编写的排序方法有什么问题。具有延迟值0的对象应该在数组中保持其原始顺序,但本机排序方法不会发生这种情况。如果我要编辑我的示例以便更清晰,请在评论中告诉我。
答案 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