1

アイテムをアルファベット順に並べ替えようとしています。ただし、アイテムタイプも並べ替えたいと思います。

例えば:

が欲しいです

  type     sortValue

blockItem   a test1
blockItem   a test2
blockItem   b test3
imageItem   a image
imageItem   b image
imageItem   c image
imageItem   s image
textItem    a text
textItem    b text
textItem    c text

私のコードはこのようなことをします。

  type     sortValue

blockItem   a test1
blockItem   a test2
imageItem   a image
textItem    a text
blockItem   b test3
imageItem   b image
textItem    b text
imageItem   c image
textItem    c text
imageItem   s image

私のソート機能

array contains type and sortvalue

array=array.sort(sortFunction);

function sortFunction(groupA, groupB) {

    if (groupA.sortValue > groupB.sortValue) {
        return 1;
    } else if (groupA.sortValue < groupB.sortValue) {
        return -1;
    }

    return 0;
}

テキストのみを並べ替え、タイプは並べ替えません。とにかくこれを行うことがあるかどうか疑問に思いました。本当にありがとう!

4

2 に答える 2

3

2 番目のキーを使用して、最初のキーが等しいかどうかを比較します。

function sortFunction(a, b) {
    if (a.key1 > b.key1) {
        return +1;
    } else if (a.key1 < b.key1) {
        return -1;
    } else if (a.key2 > b.key2) {
        return +1;
    } else if (a.key2 < b.key2) {
        return -1;
    } else 
    ...
    } else if (a.keyN > b.keyN) {
        return +1;
    } else if (a.keyN < b.keyN) {
        return -1;
    } else {
       return 0;
    }   
}

または、読みやすくするために:

function sortFunction(a, b) {
    if (a.key1 > b.key1) {
        return +1;
    } else if (a.key1 < b.key1) {
        return -1;
    }

    if (a.key2 > b.key2) {
        return +1;
    } else if (a.key2 < b.key2) {
        return -1;
    }
    ...

    if (a.keyN > b.keyN) {
        return +1;
    } else if (a.keyN < b.keyN) {
        return -1;
    }

    return 0;
}
于 2013-02-21T23:59:33.803 に答える
2
if (groupA.type == groupB.type) {
    /* your code */
}
else if (groupA.type > groupB.type) {
    return 1;
}
else if (groupA.type < groupB.type) {
    return -1;
}

return 0;
于 2013-02-21T23:59:44.570 に答える