1

この投稿を参照して; JSONオブジェクトの配列を2つのフィールドで並べ替えることができます。そして、この投稿はまた述べています:

「ソートする他の列を追加するには、配列比較に他の項目を追加できます。」

//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);

私はここで何が間違っているのですか?

4

1 に答える 1

0

私はStackOverflowを使用しており、並べ替え/並べ替えの方法のいくつかの例を組み合わせました。そして、この関数は私が探しているものを私に与えるようです...

このJSONオブジェクトの配列を[data]として指定します。

BEFORE {"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()を呼び出して、希望どおりに並べ替えることができます。

AFTER {"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);
于 2012-12-11T18:18:24.920 に答える