在开发中,我们常常遇到这样的需求,对于一个对象列表,通常需要按照多个字段进行排序。
例如对于一个数组:我们希望它首先按照groupID进行排序,若groupID一样的,按照levelID进行排序,那么我们可以这样写:
arr = [
{
groupID: '1',
levelID: '3'
},
{
groupID: '1',
levelID: '2'
},
{
groupID: '2',
levelID: '1'
},
{
groupID: '3',
levelID: '1'
},
{
groupID: '3',
levelID: '3'
},
{
groupID: '1',
levelID: '1'
},
{
groupID: '3',
levelID: '2'
},
]
// 首先按照groupID进行排序,若groupID一样的,按照levelID进行排序
arr.sort((a, b) => {
if (a.groupID === b.groupID) {
return a.levelID - b.levelID;
}
return a.groupID - b.groupID
})
console.log(arr);
> Array [Object { groupID: 1, levelID: 1 }, Object { groupID: 1, levelID: 2 }, Object { groupID: 1, levelID: 3 }, Object { groupID: 2, levelID: 1 }, Object { groupID: 3, levelID: 1 }, Object { groupID: 3, levelID: 2 }, Object { groupID: 3, levelID: 3 }]
从打印的结果看出,排序后的数组是先按groupID进行排序,然后groupID相同的按照levelID进行排序,是满足我们的需求的。
假如再加一个排序的话,我们可以这样写:
arr.sort((a, b) => {
if (a.groupID === b.groupID) {
if (a.levelID === b.levelID) {
return a.ID - b.ID;
}
return a.levelID - b.levelID
}
return a.groupID - b.groupID
})