2012-12-10 61 views
1

參考this posting;我可以通過2個字段對JSON對象數組進行排序。 而此公告還指出:嘗試使用jQuery對多個字段進行JSON排序

「要添加其他列進行排序,可以在陣列相比,添加其他項目。」

//THIS WORKS BUT NEEDS TO SORT BY ALL 5 FIELDS.. 
function sortRecords(a, b){ 
//note the minus before -cmp, for descending order 
// field1 (Y or N), field2 (numeric), field3 (numeric), 
// field4 (Y or N), field5 (Y or N) 
return cmp( 
    [-cmp(a.field1, b.field1), cmp(a.field2, b.field2)], 
    [-cmp(b.field1, a.field1), cmp(b.field2, a.field2)] 
);} 

//THIS ONLY SORTS BY field1 and field2 
function sortRecords(a, b){ 
//note the minus before -cmp, for descending order 
// field1 (Y or N), field2 (numeric), field3 (numeric), 
// field4 (Y or N), field5 (Y or N) 
return cmp( 
    [-cmp(a.field1, b.field1), cmp(a.field2, b.field2), cmp(a.field3, b.field3)], 
    [-cmp(b.field1, a.field1), cmp(b.field2, a.field2), cmp(b.field3, a.field3)] 
);} 

function cmp(x,y){ 
return x > y ? 1 : x < y ? -1 : 0; 
} 


///implementation 
data = $(data).sort(sortRecords); 

我在做什麼錯在這裏?

+0

這就像閱讀希臘語(我不會讀的方式),沒有有意義的數據,只是一堆函數調用和評論?用一些數字,字符串或任何對於不知道所有這些函數做什麼的人都可以理解的內容編寫一個基本示例,可以設置一個[** jsfiddle **](http://jsfiddle.net)等。 – adeneo

+0

@adeneo:這是我的JSON對象 { 「名」 的數組: 「JOE」, 「field1的」: 「Y」, 「FIELD2」:3 「字段3」:79, 「字段4」: 「Y」,「字段5 「:」Y「} {」name「:」BEN「,」field1「:」Y「,」field2「:15,」field3「:113,」field4「:」Y「,」field5「:」N 「} {」 名稱 「:」 SUE」, 「field1的」: 「Y」, 「FIELD2」:35, 「字段3」:395, 「字段4」: 「Y」, 「字段5」: 「Y」} 我想最初的問題是:我怎樣才能我多個字段排序的JSON對象的數組? 我在這個位置是其原因是二/三我得到最1個數據源的數據和來自另一其他的數據,我有陣列99%排序,但我添加「字段5」需要被使出。 –

回答

0

我一直在使用StackOverflow,並結合了幾個如何排序/排序的例子;並且這個函數似乎給我我正在尋找的東西...

給定這個JSON對象數組爲[data]

BEFORE { 「名稱」: 「JOE」, 「field1的」: 「Y」, 「FIELD2」:3 「字段3」:79, 「字段4」: 「Y」, 「字段5」:」 Y 「} {」 名稱 「:」 BEN」, 「field1的」: 「Y」, 「FIELD2」:15 「字段3」:113, 「字段4」: 「Y」, 「字段5」: 「N」} {「name」:「SUE」,「field1」:「Y」,「field2」:35,「field3」:395,「field4」:「Y」,「field5」:「Y」}

I可以調用sortRecords()來排序我想要的。

AFTER { 「名稱」: 「JOE」, 「field1的」: 「Y」, 「FIELD2」:3 「字段3」:79, 「字段4」: 「Y」, 「字段5」:」 Y 「} {」 名 「:」 蘇」, 「字段1」: 「Y」, 「字段2」:35, 「字段3」:395, 「字段4」: 「Y」, 「字段5」: 「Y」} { 「名稱」: 「BEN」, 「field1的」: 「Y」, 「FIELD2」:15 「字段3」:113, 「字段4」: 「Y」, 「字段5」: 「N」}

function sortRecords(a, b){ 
    if (a.field1 < b.field1){ 
     return 1; 
    } else if (a.field1 > b.field1){ 
     return -1; 
    } else if (a.field2 < b.field2){ 
     return 1; 
    } else if (a.field2 > b.field2){ 
     return -1; 
    } else if (a.field3 < b.field3){ 
     return 1; 
    } else if (a.field3 > b.field3){ 
     return -1; 
    } else if (a.field4 < b.field4){ 
     return -1; 
    } else if (a.field4 > b.field4){ 
     return 1; 
    } else if (a.field5 < b.field5){ 
     return -1; 
    } else if (a.field5 > b.field5){ 
     return 1; 
    } else { 
     return 0; 
    } 
} 

data = $(data).sort(sortRecords); 
相關問題