2016-07-14 97 views
0

你可以告訴如何使用orderBy的各種字段類型(字符串和數字)的對象? 例如orderBy與混合類型的列

_.orderBy([{a: 3}, {a: 2}, {a: 'a'}, {a: 1}, {a: 'c'}, {a: 'b'}], ['a'], ['asc']) 

我有

[{"a":2},{"a":3},{"a":"a"},{"a":1},{"a":"b"},{"a":"c"}] 

,但我怎麼能得到類似

[{"a":1},{"a":2},{"a":3},{"a":"a"},{"a":"b"},{"a":"c"}] 
+0

你可以用這種方式>>'_.sortBy(ARR,[ 「一」],功能(項目){回報的typeof item.a使用'_.sortBy'方法! =='數字'})'。在哪裏arr是你的收藏 –

+0

@The方向的原因。我使用leftPad(https://www.npmjs.com/package/left-pad)將所有項目轉換爲字符串,並得到類似'_.orderBy([{a:'958'},{a:7}, {a:'a'},{a:'66'},{a:'c'},{a:'b'}],[(item)=> leftPad(item.a,10,0)] ,['asc'])'(我只能使用_.orderBy進行更復雜的排序) – carcinogen75

回答

0

比較_.toString結果的值。

var input = [{a: 3}, {a: 2}, {a: 'a'}, {a: 1}, {a: 'c'}, {a: 'b'}], 
 
    output = _.sortBy(input, o => _.toString(o['a'])); 
 

 
console.log(output);
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>

如果您想根據第一個類型,使用_.groupBy然後排序來劃分。

var input = [{a: 3}, {a: 2}, {a: 'a'}, {a: 1}, {a: 'c'}, {a: 'b'}]; 
 
    
 
var output = _(input) 
 
    .groupBy(o => typeof o['a']) 
 
    .map(a => _.sortBy(a, 'a')) 
 
    .flatten() 
 
    .value(); 
 

 
console.log(output);
<script src="https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"></script>