如何对数组的两种类型的值进行排序

How to sort 2 types of values for an array?

本文关键字:排序 类型 两种 数组      更新时间:2023-09-26

我正在尝试按字母顺序对项目进行排序。不过,我也想对项目类型进行排序。

例如:

我想要

  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;
}

它只对文本进行排序,而不对类型进行排序。我想知道是否有办法做到这一点。非常感谢!

使用第二个键来比较第一个键是否相等:

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;
}
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;