2014-11-23 75 views
2

我正在使用下劃線對數組進行排序。有沒有辦法讓零點總是持續上升或下降?例如:在排序時始終使最後一個值爲空

[ 
    { name: 'a', age: 1 }, 
    { name: 'z', age: 5 }, 
    { name: '', age: 1 }, 
    { name: 'v', age: 7 } 
] 

會產生

[ 
    { name: 'a', age: 1 }, 
    { name: 'v', age: 7 }, 
    { name: 'z', age: 5 }, 
    { name: '', age: 1 } 
] 

和下降會產生:

[ 
    { name: 'z', age: 5 }, 
    { name: 'v', age: 7 }, 
    { name: 'a', age: 1 }, 
    { name: '', age: 1 } 
] 

我真正的數組對象的數組,所以我必須採摘值了。

+0

您可以刪除所有空值,爲什麼把他們結束了嗎? – Bazinga 2014-11-23 20:18:12

+0

我想排序對象的屬性。所以即使一個屬性爲null,其他屬性也是有用的。 – Luke101 2014-11-23 20:22:44

+0

你可以做一個笨蛋,所以我可以嘗試幫助你? – Bazinga 2014-11-23 20:24:39

回答

5

有很多方法去了解它,但你可以嘗試這樣的事:

var arr = [{name: 'a', age: 1}, {name: 'z', age: 5}, {name: '', age: 1}, {name: 'v', age: 7 }]; 

_.chain(arr) 
.sortBy('name') 
//.reverse() // to sort descending 
.partition('name') 
.flatten() 
.value(); 

結果:

[ { name: 'a', age: 1 }, 
    { name: 'v', age: 7 }, 
    { name: 'z', age: 5 }, 
    { name: '', age: 1 } ] 
+0

這不能排序。 -1 – Scimonster 2014-11-23 20:39:40

+0

他沒有要求排序。 – istos 2014-11-23 20:40:04

+0

也許他不出來說「排序」,但這是我理解問題的方式。 (也有這個效果的評論。) – Scimonster 2014-11-23 20:40:59

0

你可以簡單地整理後發現它們並手動將它們放在後面。也許通過分解兩個數組中的不同值然後連接它們。其中一個數組包含non null values,另一個the null values

1

您可以用lodash來做到這一點,而且我認爲這個函數也是下劃線。

var users =[{name: 'a', age: 1}, {name: '', age: 4}, {name: 'z', age: 5}, {name: '', age: 1}, {name: 'v', age: 7 }]; 

_.sortBy(users, 'name'); 

結果會給你空的名字的開頭:

[{name: '', age: 1}, {name: '', age: 4}, {name: 'a', age: 1}, {name: 'z', age: 5}, {name: 'v', age: 7 }];