对象数组按指定属性排序

function sort(arr) {
    let length = arr.length;
    let temp = null;

    // 使用冒泡排序法进行排序,优先按分数降序排,分数相同时按uid降序排
    for (let i = 0; i < length - 1; i++) {
        for (let j = 0; j < length - 1 - i; j++) {
            if (arr[j].score < arr[j + 1].score) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            } else if (arr[j].score == arr[j + 1].score && arr[j].uid < arr[j + 1].uid) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }

    return arr;
}

let arr = [
    {uid: 1001, name: '刘一', score: 86},
    {uid: 1002, name: '陈二', score: 99},
    {uid: 1003, name: '张三', score: 81},
    {uid: 1004, name: '李四', score: 92},
    {uid: 1005, name: '王五', score: 71},
    {uid: 1006, name: '赵六', score: 81},
    {uid: 1007, name: '孙七', score: 73},
    {uid: 1008, name: '周八', score: 70},
    {uid: 1009, name: '吴九', score: 63},
    {uid: 1010, name: '郑十', score: 93},
];

console.log('---------- 排序前 ----------');

for (let i = 0; i < arr.length; i++) {
    console.log('%s(%d):%d', arr[i].name, arr[i].uid, arr[i].score);
}
// 刘一(1001):86
// 陈二(1002):99
// 张三(1003):81
// 李四(1004):92
// 王五(1005):71
// 赵六(1006):81
// 孙七(1007):73
// 周八(1008):70
// 吴九(1009):63
// 郑十(1010):93

console.log('---------- 排序后 ----------');

let s = sort(arr);

for (let i = 0; i < s.length; i++) {
    console.log('%s(%d):%d', s[i].name, s[i].uid, s[i].score);
}
// 陈二(1002):99
// 郑十(1010):93
// 李四(1004):92
// 刘一(1001):86
// 赵六(1006):81
// 张三(1003):81
// 孙七(1007):73
// 王五(1005):71
// 周八(1008):70
// 吴九(1009):63

Copyright © 2024 码农人生. All Rights Reserved