【问题标题】:javascript sort, Compare 3 different types and sort in orderjavascript排序,比较3种不同的类型并按顺序排序
【发布时间】: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


【解决方案1】:

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

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

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

这基本上是在排序数组中最先出现的类型之后对班次进行排序。

【讨论】:

    【解决方案2】:

    您可以使用订单对象按类型排序。

    var types = { morning: 1, afternoon: 2, evening: 3 };
    
    day.shifts.sort((a, b) => types[a.type] - types[b.type]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 2021-10-07
      • 1970-01-01
      相关资源
      最近更新 更多