javascript中的天数排序数组

javascript中的天数排序数组,javascript,algorithm,function,sorting,Javascript,Algorithm,Function,Sorting,我有一个数组。该数组可以包含1到7个唯一的日名称字符串。日期名称将按从周一到周日的顺序排列例如: [“星期二”、“星期四”、“太阳”] 我想使用javascript对该数组进行排序,以便从今天开始排序 ie:如果今天是星期五,那么排序的数组应该是 [“太阳”、“周二”、“周四”] 如果今天是星期四,则排序的数组应为 [“星期四”、“太阳”、“星期二”] 有人能帮忙吗?我想出了一个函数: function sortDays(days) { var daysOfWeek = ["Sun","Mo

我有一个数组。该数组可以包含1到7个唯一的日名称字符串。日期名称将按从周一到周日的顺序排列例如:

[“星期二”、“星期四”、“太阳”]

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

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

[“太阳”、“周二”、“周四”]

如果今天是星期四,则排序的数组应为

[“星期四”、“太阳”、“星期二”]


有人能帮忙吗?

我想出了一个函数:

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; });
}
和我一起玩

function sort_days(days) {
要获取一周中的今天,请使用
newdate().getDay()
。这假定
周日=0,周一=1,…,周六=6

    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));
(今天是星期五,所以排序列表是
['Fri','Sat','Sun','Mon','Tue','Wed','Thu']

最后,要排序,请使用
indexOf

    return days.sort(function(a,b) { return sorted_list.indexOf(a) > sorted_list.indexOf(b); });
}
总而言之:

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

以防我们有一天能得到或失去一天,我已经建立了我的,不需要硬编码的日期列表:)这里希望有一天我们能在周六和周日之间得到额外的24小时

function anyDayNow( dys ) {
  var ret = [], cur = new Date(), today = cur.getUTCDay(), txt;
  do { 
    txt = cur.toUTCString().split(',')[0];
    dys.indexOf(txt)!=-1 && ret.push(txt);
    cur.setUTCDate( cur.getUTCDate() + 1 ); 
  } while ( cur.getUTCDay() != today );
  return ret;
}

console.log( anyDayNow( ["Tue", "Thu", "Sun"] ) );
函数sortDaysByToday(ds){
var days={Sun:0,Mon:1,Tue:2,Wed:3,Thu:4,Fri:5,Sat:6},
今天=新日期().getDay()
返回ds.sort(函数(a,b){
返回(天[a]<今天?天[a]+7:天[a])
-(天[b]<今天?天[b]+7:天[b])
})
}

这里有一个简单的方法,只使用数组的indexOf、splice filter和concat函数,无需循环:

function sortMyArray(toSort) {
    var today = new Date().toUTCString().substr(0, 3), //get today as 3 letter string
        list = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], // days list
        before = list.splice(0, list.indexOf(today)); // splice what is before today in the list

    list = list.concat(before); // concat the list with what was spliced

    return list.filter(function (item) { return toSort.indexOf(item) !== -1}); // return the sorted list with only the asked days
}
使用

const days=[“周一”、“周二”、“周三”、“周四”、“周五”、“周六”、“周日”];
const sortDays=函数(a,b){
a=天数。指数为(a);
b=天数。指数为(b);
返回a
如果你有一个以日期为键的对象数组,你可以使用这个版本的@SheetJS-answer

const sortDays=(天,时区)=>{
const dayOfWeek=6;
const list=[‘星期日’、‘星期一’、‘星期二’、‘星期三’、‘星期四’、‘星期五’、‘星期六’];
const sortedList=list.slice(dayOfWeek).concat(list.slice(0,dayOfWeek));
返回天数。排序((a,b)=>{
if(sortedList.indexOf(a.day)>sortedList.indexOf(b.day))返回1;
if(sortedList.indexOf(a.day)控制台日志(sortDays(天))这里有一个解决问题的有趣方法-如果这也相当有效(即没有复杂的对象等),也不会感到惊讶


我还使用了
过滤器
选项

const inOrderDays = arr => {
  const list = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  return list.filter(each => arr.includes(each));
}
这是我的答案,如果你想排序的一天开始'星期一'。您可以通过更改
daySort
变量值来更改开始日期

你只需要给这个方法一个未排序的工作日数组,它就会对它进行排序


到目前为止你都试了些什么?请发布您的代码和一个实时演示,以便我们能够提供帮助。我喜欢这样做不需要循环或排序,但它实际上不符合数组的顺序。在上面的示例中,toSort的顺序将从[“Tue”、“Thu”、“Sun”]开始。哦,我没有看到您希望进行排序,即使当前日期不在数组中。谢谢!我只是使用了没有循环的答案,因为它看起来更有效。谢谢。这似乎是最有效的方法。我只想告诉大家,这对我来说很有效,b
function sortMyArray(toSort) {
    var today = new Date().toUTCString().substr(0, 3), //get today as 3 letter string
        list = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], // days list
        before = list.splice(0, list.indexOf(today)); // splice what is before today in the list

    list = list.concat(before); // concat the list with what was spliced

    return list.filter(function (item) { return toSort.indexOf(item) !== -1}); // return the sorted list with only the asked days
}
console.log(sortMyArray(["Tue", "Thu", "Sun"]));
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"];
const sortDays = days => {
    let arr = ['', '', '', '', '', '', '']
    days.forEach(day => {
        if (day === 'Sun') arr[0] = 'Sun'
        if (day === 'Mon') arr[1] = 'Mon'
        if (day === 'Tue') arr[2] = 'Tue'
        if (day === 'Wed') arr[3] = 'Wed'
        if (day === 'Thu') arr[4] = 'Thu'
        if (day === 'Fri') arr[5] = 'Fri'
        if (day === 'Sat') arr[6] = 'Sat'
    })
    return arr.filter(str => str !== '')
}
const inOrderDays = arr => {
  const list = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  return list.filter(each => arr.includes(each));
}
sortDays(unsortedDays) {
  let daysSort = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday',
                  'satuday', 'sunday'];
  let sortedDays = [];
  daysSort.forEach((value) => {
    if (unsortedDays.includes(value)) {
      sortedDays.push(value);
    }
    });
  return sortedDays;
}