【问题标题】:Attempting to sort JSON by multiple fields with jQuery尝试使用 jQuery 按多个字段对 JSON 进行排序
【发布时间】:2012-12-10 21:12:35
【问题描述】:

参考this posting;我可以按 2 个字段对 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);

我在这里做错了什么?

【问题讨论】:

  • 这就像读希腊文(顺便我没看),没有有意义的数据,只是一堆函数调用和cmets?用一些数字、字符串或任何不知道所有这些功能做什么的人可以理解的基本示例,可能设置一个jsfiddle 等。
  • @adeneo : 这是我的 JSON 对象数组 {"name":"JOE","field1":"Y","field2":3,"field3":79,"field4" :"Y","field5":"Y"} {"name":"BEN","field1":"Y","field2":15,"field3":113,"field4":"Y", "field5":"N"} {"name":"SUE","field1":"Y","field2":35,"field3":395,"field4":"Y","field5":" Y"} 我想最初的问题是:如何按多个字段对 JSON 对象数组进行排序?我处于这个位置的原因是 b/c 我从 1 个数据源获得了大部分数据,而从另一个数据源获得了其他数据,我对数组进行了 99% 的排序,但我添加了需要使用的“field5”。

标签: jquery json sorting


【解决方案1】:

我一直在使用 StackOverflow,并结合了几个如何排序/排序的示例;这个功能似乎给了我我想要的东西......

给定这个 JSON 对象数组为 [data]

之前 {"name":"JOE","field1":"Y","field2":3,"field3":79,"field4":"Y","field5":"Y"} {"name":"BEN","field1":"Y","field2":15,"field3":113,"field4":"Y","field5":"N"} {"name":"SUE","field1":"Y","field2":35,"field3":395,"field4":"Y","field5":"Y"}

我可以调用 sortRecords() 来排序。

之后 {"name":"JOE","field1":"Y","field2":3,"field3":79,"field4":"Y","field5":"Y"} {"name":"SUE","field1":"Y","field2":35,"field3":395,"field4":"Y","field5":"Y"} {"name":"BEN","field1":"Y","field2":15,"field3":113,"field4":"Y","field5":"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);

【讨论】:

    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多