Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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数组排序并制定与天数范围相同的计划_Javascript_Sorting_Date_Range_Days - Fatal编程技术网

Javascript数组排序并制定与天数范围相同的计划

Javascript数组排序并制定与天数范围相同的计划,javascript,sorting,date,range,days,Javascript,Sorting,Date,Range,Days,我收到了带有破折号范围的CSV办公日程安排,日期与日程安排相同 例如,今天是星期四: 周一3:00-9:00,周二-周四5:30-9:30,周五7:15-10:00, 周六上午8:00-下午3:00,周日休息 我需要删除星期天关闭的时间表,并首先显示星期四例如,如果今天是星期四 我的预期输出如下: 星期二至四上午5:30至晚上9:30,星期五上午7:15至晚上10:00,星期六上午8:00至下午3:00,星期一上午3:00至晚上9:00 如果今天是星期四(当天),一些示例和预期结果: “周一上午

我收到了带有破折号范围的CSV办公日程安排,日期与日程安排相同

例如,今天是星期四:

周一3:00-9:00,周二-周四5:30-9:30,周五7:15-10:00, 周六上午8:00-下午3:00,周日休息

我需要删除星期天关闭的时间表,并首先显示
星期四
例如,如果今天是
星期四

我的预期输出如下:

星期二至四上午5:30至晚上9:30,星期五上午7:15至晚上10:00,星期六上午8:00至下午3:00,星期一上午3:00至晚上9:00

如果今天是星期四(当天),一些示例和预期结果:

“周一上午4:00-9:00,周二上午6:00-9:30,周三-周五上午5:30-9:30,周六上午8:00-3:00,周日休息”
预期结果:
“周二上午6:00-9:30,周三-周五上午5:30-9:30,周六上午8:00-3:00,周一上午4:00-9:00”

“周三上午5:30-晚上9:30,周四上午6:30-下午4:00,周五-周二上午8:00-下午3:00,周日休息”
预期结果:
“周四上午6:30-下午4:00,周五-周二上午8:00-下午3:00,周三上午5:30-晚上9:30”

“周一至周二上午5:30至晚上9:30,周三上午6:30至下午4:00,周四至周六上午8:00至下午3:00,周日休息”
预期结果:
“周四至周六上午8:00至下午3:00,周一至周二上午5:30至下午9:30,周三上午6:30至下午4:00”

我的当前代码部分正常工作:

function sortDays(days) {
    var dayOfWeek = new Date().getDay();
    var list = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
    var sortedList = list.slice(dayOfWeek).concat(list.slice(0, dayOfWeek));
    return days.sort(function(a,b) { return sortedList.indexOf(a) > sortedList.indexOf(b); });
}

function removeA(arr) {
    var what, a = arguments, L = a.length, ax;
    while (L > 1 && arr.length) {
        what = a[--L];
        while ((ax= arr.indexOf(what)) !== -1) {
            arr.splice(ax, 1);
        }
    }
    return arr;
}

function getDaysRange(first, last) {
    // var week = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
    var week = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];

    // Find first day
    var firstIndex = week.indexOf(first);
    // Shift array so that first day is index 0
    week = week.concat(week.splice(0, firstIndex));
    // Find last day
    var lastIndex = week.indexOf(last);

    // Cut from first day to last day and convert to CSV string
    // return week.slice(0, lastIndex + 1).toString();
    return week.slice(0, lastIndex + 1);
}



function reorderSchedule(schedule) {

    var detailedSchedule = [];
    var daysInWeek = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
    var scheduleExploded = schedule.split(',');
    var schedulehtms = '';

    console.log('===============================>>>>>>>>>>>>>>>>>>>');
    for (var i = 0, len = scheduleExploded.length; i < len; i++) {
        schedulehItem = scheduleExploded[i].trim();
        console.log(schedulehItem + ' = LOOP NUMBER ' + i + ' >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');

        var count = (schedulehItem.match(/-/g) || []).length;
        console.log(count + " piece(s) of - found inside " + schedulehItem);

        if (count >= 2) {
            console.log(schedulehItem + ' is a range! ===============');

            // break down the days range
            var search = schedulehItem.search(/\d/);

            var scheduleOfRange = schedulehItem.substring(search, schedulehItem.length);
            console.log(scheduleOfRange);
            var daysRange = schedulehItem.substring(0, search - 1);
            console.log(daysRange);

            var arr = daysRange.split('-');
            var first = arr[0].trim();
            var second = arr[1].trim();

            var daysRange = getDaysRange(first, second);
            daysRange = removeA(daysRange, 'Sun');
            console.log(daysRange);
            console.log('>>>>>>>');

            for (x = 0; x < daysRange.length; x++) { 
                detailedSchedule.push(daysRange[x] + ' ' + scheduleOfRange);
            }

        } else {
            // insert the schedule in the final array
            detailedSchedule.push(schedulehItem);
        }

    }
    console.log('===============================>>>>>>>>>>>>>>>>>>>');
    console.log('=============');
    console.log(detailedSchedule);
    console.log('=============');

    var origDaysOnlyOrder = [];
    var daysWithScheduleOrder = [];
    var sortedDays = sortDays(daysInWeek);

    for (i = 0; i < detailedSchedule.length; i++) {        

        var myNewStr = detailedSchedule[i].substr(0, 3);
        // origDaysOnlyOrder.push(myNewStr);
        daysWithScheduleOrder[myNewStr] = detailedSchedule[i];
    }

    console.log('vvvvvvvvvvvvvvvvvvvvvvvvvvvv');
    console.log(daysWithScheduleOrder);
    console.log(sortedDays);

    var finalArray = [];
    for (i = 0; i < sortedDays.length; i++) {
        // don't insert undefined values
        if (typeof(daysWithScheduleOrder[sortedDays[i]]) != 'undefined') {
            // finalArray.push(daysWithScheduleOrder[sortedDays[i]]);
            finalArray[sortedDays[i]] = daysWithScheduleOrder[sortedDays[i]].substr(3).trim();
        }
    }

    // remove
    console.log(finalArray);
    console.log('######################>>>');

    // now in correct order then bring back the dash in the original range, check for same schedules then create the range
    // find first

    var scheduleObj = {};
    for (var key in finalArray) {
        var value = finalArray[key];
        // console.log(key, value);
        scheduleObj[key] = value;
    }
    console.log(scheduleObj);


    var hash = Object.create(null);
    var result = Object.create(null);

    Object.keys(scheduleObj).forEach(k => {
        var grp = scheduleObj[k];

        (grp in hash) ? hash[grp].push(k) : (hash[grp] = [k]);
    });

    for (key in hash) {
        if (hash[key].length > 1) {
            result[key] = hash[key].toString();
        }
    }

    console.log(hash);
    console.log('hash sa taas');


    var finalScheduleArray = [];
    // loop hash
    Object.keys(hash).forEach(function(key) {
        // console.log(key, result[key]);
        console.log(key, hash[key]);
        var my_key = key;
        var my_value = hash[key];


        if (my_value.length == 1) {
            finalScheduleArray[my_value] = my_key;
        } else {

            var rangeArray = [];
            for (i = 0; i < my_value.length; i++) {
                console.log(my_value[i]);
                rangeArray.push(my_value[i]);

            }
            console.log(rangeArray);

            var firstItem = rangeArray[0];
            var lastItem = rangeArray[rangeArray.length-1];
            finalScheduleArray[firstItem + ' - ' + lastItem] = my_key;
        }

    });

    console.log(finalScheduleArray);
    console.log('finalScheduleArray ----------');
    return 'zzz';
}

$(function() {
    // var schedule = 'Mon 4:00am - 9:00pm, Tue 6:00am - 9:30pm, Wed - Fri 5:30am - 9:30pm, Sat 8:00am - 3:00pm, Sun Closed'; // MALI Wed - Fri
    // var schedule = 'Mon 4:30am - 9:30pm, Tue 5:30am - 9:30pm, Wed 5:00am - 9:30pm, Thu - Sat 8:00am - 3:00pm, Sun Closed'; // tama Thu - Sat
    var schedule = 'Mon 3:00am - 9:00pm, Tue - Thu 5:30am - 9:30pm, Fri 7:15am - 10:00pm, Sat 8:00am - 3:00pm, Sun Closed'; // MALI Tue - Thu
    console.log(reorderSchedule(schedule));
});
功能排序日(天){
var dayOfWeek=new Date().getDay();
变量列表=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
var sortedList=list.slice(dayOfWeek).concat(list.slice(0,dayOfWeek));
返回天数.sort(函数(a,b){return sortedList.indexOf(a)>sortedList.indexOf(b);});
}
功能移除(arr){
var what,a=参数,L=a.length,ax;
while(长度>1&&arr.length){
什么=a[--L];
while((ax=arr.indexOf(what))!=-1){
阵列拼接(ax,1);
}
}
返回arr;
}
函数getDaysRange(第一个,最后一个){
//var week=新数组(“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”);
var week=[‘星期日’、‘星期一’、‘星期二’、‘星期三’、‘星期四’、‘星期五’、‘星期六’];
//找到第一天
var firstIndex=周指数(第一);
//移位数组,使第一天为索引0
week=week.concat(week.splice(0,firstIndex));
//找到最后一天
var lastIndex=周指数(last);
//从第一天剪切到最后一天并转换为CSV字符串
//return week.slice(0,lastIndex+1).toString();
返回周。切片(0,lastIndex+1);
}
功能重新排序时间表(时间表){
var detailedSchedule=[];
var daysInWeek=[“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”];
var scheduleExploded=schedule.split(',');
var schedulehtms='';
console.log('==================================>>>>>>>>>>>>>>>);
for(变量i=0,len=schedule.length;i>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
变量计数=(schedulehItem.match(/-/g)| |[])长度;
console.log(计数+在“+schedulehItem”中找到的一个或多个);
如果(计数>=2){
log(schedulehItem+'是一个范围!===========================');
//细分天数范围
var search=schedulehItem.search(/\d/);
var scheduleorfrange=schedulehItem.substring(搜索,schedulehItem.length);
日志(scheduleOfRange);
var daysRange=schedulehItem.substring(0,搜索-1);
console.log(daysRange);
var arr=daysRange.split('-');
var first=arr[0]。trim();
var second=arr[1]。trim();
var daysRange=getDaysRange(第一,第二);
daysRange=removeA(daysRange,“Sun”);
console.log(daysRange);
console.log('>>>>>');
对于(x=0;x>>>>>>>>>>>>>>);
console.log('===================');
控制台日志(详细时间表);
console.log('===================');
var origDaysOnlyOrder=[];
var daysWithScheduleOrder=[];
var sortedDays=sortDays(daysInWeek);
对于(i=0;i>);
//现在按照正确的顺序,然后将破折号恢复到原始范围,检查相同的明细表,然后创建范围
//先找到
var scheduleObj={};
for(finalArray中的var键){
var值=最终光线[关键点];
//console.log(键、值);
scheduleObj[键]=值;
}
console.log(scheduleObj);
var hash=Object.create(null);
var result=Object.create(空);
key(scheduleObj).forEach(k=>{
var grp=scheduleObj[k];
(哈希中的grp)?哈希[grp]。推送(k):(哈希[grp]=[k]);
});
for(输入哈希){
如果(哈希[键]。长度>1){
结果[key]=hash[key].toString();
}