2017-07-16 20 views
2

我想基於整數屬性對對象的數組進行排序。當使用lodash的方法_.sortBy()順序是預期的,但是當我使用內置方法時,它是不正確的。本機Array.prototype.sort()和_.sortBy()排序值不同

查看此處的代碼片段:jsbin link。這不是最易讀的例子。我無法確定我寫的排序方法有什麼問題。具有延遲值0的對象應該保持它們在數組中的原始順序,但這不會發生在本地排序方法中。如果我應該編輯我的示例以獲得更多清晰度,請在評論中告訴我。

+0

我沒有你已瞭解的例子(嘗試張貼一個更好的),但在一般情況下,內置的排序是不能保證穩定的(即相等的對象並不需要保留他們原來的相對位置)。 – georg

回答

2

你的排序方法似乎沒有錯。但是,您的期望可能不完全正確。

_.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