2012-12-10 62 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); 
相关问题