2016-09-18 54 views
1

一個地圖以正確的方式我有一個地圖m什麼是排序他們的財產的子對象在Immutable.js

var m = Immutable.fromJS({ 
    first: {a: 6, b: 3}, 
    second: {a: 3, b: 6}, 
    third: {a: 2, b: 4} 
}) 

我想通過自己的財產b排序在m子對象,像這樣:

[ 
    {a: 6, b: 3}, 
    {a: 2, b: 4}, 
    {a: 3, b: 6} 
] 

我已經試過如下:

m.valueSeq().sort(function(a, b) { 
    return a.get('b') > b.get('b') 
}).toJS() 

它運作良好,在Chrome和node.js中,但在OS X中的Safari 8.0,結果是

[ 
    {a: 6, b: 3}, 
    {a: 3, b: 6}, 
    {a: 2, b: 4} 
] 

它沒有那種了!這在我的React/Redux應用程序中造成了一些錯誤。它的問題是什麼?那麼排序它的正確方法是什麼?謝謝!

+0

你應該返回一個布爾值,當你應該返回一個數字。 '返回a.get('b') - b.get('b')'。當「a」更大時,這返回一個正數。當「b」較大時,它返回一個負數,等於時返回「0」。 – 2016-09-18 13:58:15

回答

0

您的自定義比較函數需要返回1,-1或0才能正確地對項目進行排序。

m.valueSeq().sort(function(a, b) { 
    if (a.get('b') > b.get('b')) return 1; 
    if (a.get('b') < b.get('b')) return -1; 
    else return 0; 
}).toJS(); 
+0

是的,你是對的。謝謝! – fhgsm123