js怎么先按ctime desc,再按title asc

示例:

let data = [
    {title: "B", ctime: "2023-04-01"},
    {title: "C", ctime: "2023-04-02"},
    {title: "A", ctime: "2023-04-01"},
    // ...其他对象
];

// 第一次排序:按ctime降序
data.sort((a, b) => new Date(b.ctime).getTime() - new Date(a.ctime));

// 第二次排序:在ctime相同的情况下,按title升序
data.sort((a, b) => {
    if (new Date(a.ctime).getTime() === new Date(b.ctime).getTime()) {
        return a.title.localeCompare(b.title);
    }
    return 0; // 如果ctime不同,则维持之前排序结果
});

console.log(data);

这段代码首先使用 Date 对象将 ctime 字符串转换为时间戳进行比较,实现按 ctime 的降序排列。随后,在这个基础上,利用 localeCompare() 方法对那些 ctime 相同的对象按 title 进行升序排列。注意,由于第一次排序已经确定了主要排序依据(ctime 降序),第二次排序只需在 ctime 相同时进行,所以在第二次排序的比较函数中,当 ctime 不相同时返回 0 以维持之前的排序结果。