2015-08-25 26 views
0

Loadash默認排序函數函數按ASCII字符排序數據。在小寫字母和大寫字符串之間進行排序時會造成麻煩。Loadash sortby按字母順序排列

filteredData = _.sortBy(filteredData, sortByField); 

這裏filteredData是一個對象數組。我只是調試到sortby方法,我可以看到,在內部只有需要排序的列形成一個數組..

換句話說,我有filtereddata,它有列col1,col2,col3,col4 ...基於sortbyField,在loadash.js文件中,形成一個內部數組.. ..例如,如果我想sortby col3,一個數組與col3形成,然後進行排序..

I正在考慮在loadash文件中包含toLowerCase,但由於它不可取,我還沒有做到。

另一種選擇是,我必須將整個對象轉換成小寫,我相信它會開銷。

有人能爲我提供最好的解決方案嗎?

回答

1
_.sort(filteredData, function (a, b) { 
    var col1a = a.col1.toLowerCase(); 
    var col1b = b.col1.toLowerCase(); 
    if (col1a === col1b) { 
    return 0; 
    } 
    if (col1a > col1b) { 
    return 1; 
    } 
    return -1; 
}); 

或花式:

var modArg = function (arg) { 
    return arg.col1.toLowerCase(); 
}; 

var compare = _.modArg(function (a, b) { 
    if (a === b) { 
    return 0; 
    } 
    if (a > b) { 
    return 1; 
    } 
    return -1; 
}, modArg, modArg); 

_.sort(filteredData, compare); 
+0

這裏filteredData是一個數組,也的SortField(COL1)是動態的一個。 另外我m使用_sortBy的loadash ...我很好擺脫loadash,但有什麼選擇,我可以用loadash本身? – TechQuery

+0

抱歉代碼應該讀取_.sortBy。您可以將比較功能更改爲適合您的情況的功能。我寫的是比較col1的小寫字母,但可以根據需要進行修改 –