2016-02-17 52 views
2

如果我有對象像這樣的數組:排序在javascript - 忽略排序時相同的值

percentages_oparea 
0: 
    name: test1 
    pvalue: 15 
1: 
    name: test2  
    pvalue: 16 

我可以在JavaScript這樣排序的:

percentages_oparea.sort(function(a, b) { 
    return parseFloat(b.pvalue) - parseFloat(a.pvalue); 
}); 

,它正常工作:

percentages_oparea 
0: 
    name: test2 
    pvalue: 16 
1: 
    name: test1  
    pvalue: 15 

如果b.value是完全一樣的值a.value我不想任何排序。如何實現這一目標?

我不知道爲什麼,但我得到這個結果(測試1和測試2交換索引)恰好具有在P值相同的值時:

0: 
    name: test2 
    pvalue: 15 
1: 
    name: test1  
    pvalue: 15 

但我想(什麼應該改變)

0: 
    name: test1 
    pvalue: 15 
1: 
    name: test2  
    pvalue: 15 
+2

[輸入javascript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)不是[stable](https:// en。 wikipedia.org/wiki/Sorting_algorithm#Stability)排序算法。所以它可能交換相同值的元素 – Liam

+1

另請參見:[快速穩定的排序算法實現在JavaScript](http://stackoverflow.com/questions/1427608/fast-stable-sorting-algorithm-implementation-in-javascript) – Liam

回答

1

什麼你指的被稱爲穩定性,指的是一種算法能力,以維護被視爲相等項目中的排序。並非所有的算法都可以做到這一點,不幸的是,您使用的算法顯然不適用。

我建議您查看this article regarding sorting algorithms以獲取完整列表。

+2

您可以通過參考http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.11 –

+0

@ChrisLear更新「顯然不是」到「絕對不」。不清楚是否或者OP沒有使用標準的排序算法,所以我不得不留下懷疑的餘地。 ;) – Neil