【发布时间】:2018-02-16 19:05:00
【问题描述】:
我有一个对象数组。每个对象都有一个“日类型”;早上下午晚上。由于异步差异,每次我获得列表时它们都会随机排列......但我需要按以下顺序显示它们:早上、下午、晚上。
如果我使用 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',
}
【问题讨论】:
-
如果你的数据结构比变量更好,就不需要 if 语句了。
-
Sort 只比较两个东西并移动到下一组,它不是一次加载每个项目的东西。
-
我意识到....起初没有想到,当我快速浏览搜索“比较 3 个值”的示例时,我只是假设简化为比较两个值的示例....但现在我知道,它不是关于“类型”,而是关于比较集合中的两个元素并决定哪个是第一个,无论顺序中有多少类型。
标签: javascript arrays sorting compare