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