在javascript中排序天数

CMH*_*CMH 8 javascript sorting algorithm function

我有一个阵列.该数组可以包含1到7个唯一的日期名称字符串.当天的名字将从周一到周日. - 例如:

["星期二","星期四","太阳报"]

我想使用javascript对该数组进行排序,以便订单将从今天开始.

即:如果今天是星期五,那么排序的数组应该是

["太阳报","星期二","星期四"]

如果今天是星期四那么排序的数组应该是

["星期四","太阳报","星期二"]

有人可以帮忙吗?

She*_*tJS 9

function sort_days(days) {
Run Code Online (Sandbox Code Playgroud)

要获得今天的一周,请使用new Date().getDay().这假定Sunday = 0, Monday = 1, ..., Saturday = 6.

    var day_of_week = new Date().getDay();
Run Code Online (Sandbox Code Playgroud)

要生成星期几的列表,请切片名称列表:

    var list = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
    var sorted_list = list.slice(day_of_week).concat(list.slice(0,day_of_week));
Run Code Online (Sandbox Code Playgroud)

(今天是星期五,所以sorted_list['Fri','Sat','Sun','Mon','Tue','Wed','Thu'])

最后,要排序,使用indexOf:

    return days.sort(function(a,b) { return sorted_list.indexOf(a) > sorted_list.indexOf(b); });
}
Run Code Online (Sandbox Code Playgroud)

把它们放在一起:

function sort_days(days) {
    var day_of_week = new Date().getDay();
    var list = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
    var sorted_list = list.slice(day_of_week).concat(list.slice(0,day_of_week));
    return days.sort(function(a,b) { return sorted_list.indexOf(a) > sorted_list.indexOf(b); });
}
Run Code Online (Sandbox Code Playgroud)


Ign*_*rus 5

这是我想出的一个函数:

function sortDays(days) {
  var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var today = new Date().getDay();
  for (var i=0;i<today;i++) daysOfWeek.push(daysOfWeek.shift());
  return daysOfWeek.filter(function(d) { return days.indexOf(d) >= 0; });
}
Run Code Online (Sandbox Code Playgroud)

总体思路是根据今天是哪一天,通过从开始到结束轮换元素来重新安排一周中的几天。然后,您使用该排序重新排序您的输入数组以匹配。我没有实际排序,而是daysOfWeek根据输入数组的内容过滤数组。

我不确定Array.filter支持的程度,因此您可能希望将其更改为通用 for 循环,而不是取决于您要支持的浏览器。

这是一个 jsfiddle,您也可以在其中使用它。

或者,您可以Array.sort按照类似的策略使用内置方法:

var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];

{
    var today = new Date().getDay();
    for (var i=0;i<today;i++) daysOfWeek.push(daysOfWeek.shift());
}

function daysOfWeekSorter(x,y) {
    return daysOfWeek.indexOf(x)-daysOfWeek.indexOf(y);
}

var myDays = ["Tue", "Thu", "Sun"];
myDays.sort(daysOfWeekSorter);
Run Code Online (Sandbox Code Playgroud)

这里的另一个拨弄一起玩。


chr*_*ris 5

const days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];

const sortDays = function (a, b) {
  a = days.indexOf(a);
  b = days.indexOf(b);
  return a < b ? 0 : 1;
};

const myArrayOfDays = ["Tuesday", "Saturday", "Monday", "Thursday"].sort(sortDays);
// returns ["Monday", "Tuesday", "Thursday", "Saturday"];
Run Code Online (Sandbox Code Playgroud)