javascript排序,比较3种不同类型并按顺序排序

标签 javascript arrays sorting compare

我有一个对象数组。每个对象都有一个“日类型”;上午下午晚上。由于异步差异,每次我获取列表时它们都会以随机顺序出现...但我需要按以下顺序显示它们:早上、下午、晚上。

如果我使用 array.sort(),它们将按顺序出现:下午、晚上、早上。因为它是按字母顺序排序的吗?

所以...我需要一个比较函数。但我不知道如何做到这一点,因为我找到的所有示例都只有两个输入。排序(a,b)……

day.shifts = randomOrder;
day.shifts.sort((a, b, c) => {
    //some how compare all 3
}

我希望这是可能的,而且这可能是小菜一碟......否则我已经想到了这样的解决方案

day.shifts = randomOrder;
const morning = [];
const afternoon = [];
const evening = [];

day.shifts.forEach(shift => {
    if(shift.type === 'morning'){
        morning.push(shift)
    }
    if(shift.type === 'afternoon'){
        afternoone.push(shift)
    }
    if(shift.type === 'evening'){
        evening.push(shift)
    }
}
day.shifts = morning.concat(afternoon).concat(evening);

如果可能的话,我更喜欢比较方法。或者至少比我的分割为单独的数组和连接方法更“漂亮”一点......

列表中的对象如下所示:

{
    type: 'morning',
    name: 'some person',
    id: 'person db index',
}

最佳答案

您可以像这样对它们进行排序:

 const order = ["morning", "afternoon", "evening"];

 day.shifts.sort((a, b) => order.indexOf(a.type) - order.indexOf(b.type));

这基本上对顺序数组中类型排在第一位之后的移位进行排序。

关于javascript排序,比较3种不同类型并按顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48833315/

相关文章:

algorithm - 无法理解在外部合并排序中将多大块数据加载到 RAM 中

javascript - 如何使用 jquery 删除现有表单并添加 onsubmit

java - HashMap字典顺序java如果值相同

javascript - IndexedDB 数据库身份验证 - 安全选项 - 加密/散列 JavaScript HTML5

java - 如何将 char 数组从 C JNI 函数作为 byte[] 传递给 Java 方法

java - 逐列打印二维数组

c++ - 数组初始化 - 有条件地

c# - LINQ仅对数字数据进行排序但保持列表完整

javascript - 如何更改粘性标题的背景

javascript - Jquery Flipbook 上传 PDF