【问题标题】:How to sort days of week by setting the first day of week?如何通过设置一周的第一天对一周中的几天进行排序?
【发布时间】:2019-10-07 19:00:27
【问题描述】:

如何排序?例如,我希望我一周的第一天是星期一。从此:

周日周一周二周三周四周五周六

我想要这个:

周一周二周三周四周五周六周日

或者我希望我一周的第一天是星期五

那么输出应该是这样的:

周五周六周日周一周二周三周四

let days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] //by default first day of week is 0
let firstDayOfWeek = 1 //Mon

days = days.map(m=>{
  //how i can sort this?
  return m
})

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    let days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] //by default first day of week is 0
    let firstDayOfWeek = 2 //Mon
    
    days = days.slice(firstDayOfWeek).concat(days.slice(0, firstDayOfWeek));
    
    console.log(days);

    【讨论】:

      【解决方案2】:

      您可以创建一个包含 2 次迭代 days 数组的数组,然后使用 slice 从任何索引中获取 7 个项目

      let days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
      
      function getSortedWeek(firstDayOfWeek, days) {
        return [...days, ...days].slice(firstDayOfWeek, firstDayOfWeek + 7)
      }
      
      console.log(getSortedWeek(1, days)) // Mon
      console.log(getSortedWeek(3, days)) // Wed

      代码[...days, ...days] 给出了一个包含 14 个元素的数组,适用于一周中的任何一天。

      【讨论】:

      • 我真的很喜欢这个主意
      【解决方案3】:

      这样试试

      let days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] //by 
      function sortDay(firstDayOfWeek){
        var result = [];
        for(i=0; i<days.length;i++){
          result.push(days[firstDayOfWeek%7])
          firstDayOfWeek++;
        }
        console.log(JSON.stringify(result))
      }
      sortDay(1)
      sortDay(4)

      【讨论】:

        【解决方案4】:

        您可以按天排序

        let days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] //by default first day of week is 0
        let firstDayOfWeek = 2 //Mon
        
        let sorted = days.map((_, i) => days[(i+firstDayOfWeek)%7]);
        
        console.log(sorted)

        【讨论】:

          【解决方案5】:

          您可以取一个天数并通过添加 delta 来调整该值,然后将带有 7 的提醒进行排序。

          const
              dayValues = { Sun: 0, Mon: 1, Tue: 2, Wed: 3, Thu: 4, Fri: 5, Sat: 6 },
              days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
              firstDayOfWeek = 1,
              delta = 7 - firstDayOfWeek;
          
          days.sort((a, b) => (dayValues[a] + delta) % 7 - (dayValues[b] + delta) % 7);
          
          console.log(days);

          【讨论】:

            【解决方案6】:

            firstDayOfWeek 之前的日子切片,并将它们添加到数组的末尾:

            const orderByFirstDayOfWeek = (firstDayOfWeek, days) =>
              [...days.slice(firstDayOfWeek), ...days.slice(0, firstDayOfWeek)]
            
            const days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] //by default first day of week is 0
            
            console.log(JSON.stringify(orderByFirstDayOfWeek(1, days))) // Mon 1st
            console.log(JSON.stringify(orderByFirstDayOfWeek(5, days))) // Fri 1st

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-07-11
              • 2014-08-28
              • 2019-08-30
              • 1970-01-01
              • 2012-08-22
              • 1970-01-01
              相关资源
              最近更新 更多