2016-09-18 56 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