Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript排序,比较3种不同类型并按顺序排序_Javascript_Arrays_Sorting_Compare - Fatal编程技术网

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

javascript排序,比较3种不同类型并按顺序排序,javascript,arrays,sorting,compare,Javascript,Arrays,Sorting,Compare,我有一个对象数组。每个对象都有一个“日类型”;早上,下午,晚上。由于异步差异,每次我获取列表时,它们都以随机顺序出现。。。但我需要按以下顺序显示它们:上午、下午、晚上 如果我使用array.sort(),它们将按顺序显示:下午、晚上、早上。因为它按字母顺序排列对吗 所以。。。我需要一个比较函数。但我不知道怎么做,因为我找到的所有例子只有两个输入。排序(a,b) 我希望这是可能的,而且可能是小菜一碟。。。。另一方面,我也想到了这样的解决办法 day.shifts = randomOrder; co

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

如果我使用array.sort(),它们将按顺序显示:下午、晚上、早上。因为它按字母顺序排列对吗

所以。。。我需要一个比较函数。但我不知道怎么做,因为我找到的所有例子只有两个输入。排序(a,b)

我希望这是可能的,而且可能是小菜一碟。。。。另一方面,我也想到了这样的解决办法

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));

您可以按如下方式对它们进行排序:

{
    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));

这基本上是按照顺序数组中的第一个类型对移位进行排序。

您可以按如下方式对移位进行排序:

{
    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));

这基本上是在order数组中,先按类型对移位进行排序。

您可以使用order的对象按类型进行排序

var types = { morning: 1, afternoon: 2, evening: 3 };

day.shifts.sort((a, b) => types[a.type] - types[b.type]);

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

var types = { morning: 1, afternoon: 2, evening: 3 };

day.shifts.sort((a, b) => types[a.type] - types[b.type]);

如果你的数据结构比变量好,那么就不需要if语句了。排序只会比较两件事并转移到下一个集合,它不是一次加载每一项的东西。我意识到。。。。起初我没有想到,当我快速浏览我搜索“比较3个值”的示例时,我只是假设这些示例简化为比较两个。。。。但现在我知道了,这不是关于“类型”,而是关于比较集合中的两个元素,并决定哪一个元素是先出现的,无论顺序中有多少类型。如果您使数据结构比变量更好,就不需要if语句。Sort只比较两个元素并移动到下一个集合,它不是一次装载所有物品的东西。我意识到。。。。起初我没有想到,当我快速浏览我搜索“比较3个值”的示例时,我只是假设这些示例简化为比较两个。。。。但现在我知道了,这不是关于“类型”,而是关于比较集合中的两个元素,并决定哪一个元素是第一个元素,无论顺序中有多少类型。