Javascript 包含按星期几存储小时数的组对象

Javascript 包含按星期几存储小时数的组对象,javascript,Javascript,我试着用商店的营业时间来划分日子 这就是我的对象This.customer.customerStoreStandardHours的样子 [ { "dayOfWeek":"Monday", "open":"8:00 AM", "close":"5:00 PM" }, { "dayOfWeek":"Tuesday", "open":"8:00 AM", "close":"5:00 PM" }, {

我试着用商店的营业时间来划分日子

这就是我的对象This.customer.customerStoreStandardHours的样子

[
   {
      "dayOfWeek":"Monday",
      "open":"8:00 AM",
      "close":"5:00 PM"
   },
   {
      "dayOfWeek":"Tuesday",
      "open":"8:00 AM",
      "close":"5:00 PM"
   },
   {
      "dayOfWeek":"Wednesday",
      "open":"8:00 AM",
      "close":"6:00 PM"
   },
   {
      "dayOfWeek":"Thursday",
      "open":"8:00 AM",
      "close":"5:00 PM"
   },
   {
      "dayOfWeek":"Friday",
      "open":"8:00 AM",
      "close":"5:00 PM"
   },
   {
      "dayOfWeek":"Saturday",
      "open":"8:00 AM",
      "close":"4:00 PM"
   }
]
这就是我到目前为止所做的:

storeGroupedHours() {
    if (this.customer.customerStoreStandardHours) {
        const groupedObject = this.customer.customerStoreStandardHours.reduce(function (accumulator, currentValue, i, array) {
            const key = currentValue.open + currentValue.close

            accumulator.ranges[key] = accumulator.ranges[key] || {};
            accumulator.days[key] = accumulator.days[key] || [];
            accumulator.ranges[key] = {
                open: currentValue.open,
                close: currentValue.close
            };

            accumulator.days[key].push({
                index: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'].indexOf(currentValue.dayOfWeek),
                name: currentValue.dayOfWeek
            })

            if (i == array.length - 1) {
                for (let key in accumulator.ranges) {
                    if (accumulator.ranges.hasOwnProperty(key)) {
                        accumulator.days[key].sort(function(a, b) {
                            return a.index - b.index
                        });
                        if (accumulator.days[key][0].name === accumulator.days[key][accumulator.days[key].length - 1].name) {
                            accumulator.grouped.push({
                                days: [
                                    accumulator.days[key][0].name,
                                ].join(''),
                                open: accumulator.ranges[key].open,
                                close: accumulator.ranges[key].close
                            });
                        } else {
                            accumulator.grouped.push({
                                days: [
                                    accumulator.days[key][0].name,
                                    accumulator.days[key][accumulator.days[key].length - 1].name
                                ].join('-'),
                                open: accumulator.ranges[key].open,
                                close: accumulator.ranges[key].close
                            });
                        }
                    }
                }
            }
            return accumulator
        }, {
            ranges: {},
            days: {},
            grouped: [],
        });

        return groupedObject.grouped;
    }
}
这就产生了:

[
   {
      "days":"Monday-Friday",
      "open":"8:00 AM",
      "close":"5:00 PM"
   },
   {
      "days":"Wednesday",
      "open":"8:00 AM",
      "close":"6:00 PM"
   },
   {
      "days":"Saturday",
      "open":"8:00 AM",
      "close":"4:00 PM"
   }
]
我真的很亲近,但问题是,如果一个商店在不同的时间段之间有不同的时间,它就不会打破白天(即星期三开放到6天),而是每隔一个工作日开放到5天。它将返回M-F9-5和W9-6。所以在这个场景中,我希望这样:

[
   {
      "days":"Monday-Tuesday",
      "open":"8:00 AM",
      "close":"5:00 PM"
   },
   {
      "days":"Wednesday",
      "open":"8:00 AM",
      "close":"6:00 PM"
   },
   {
      "days":"Thursday-Friday",
      "open":"8:00 AM",
      "close":"5:00 PM"
   },
   {
      "days":"Saturday",
      "open":"8:00 AM",
      "close":"4:00 PM"
   }
]

您可以查看打开、关闭和添加新对象。否则,请更改days属性

var data=[{dayOfWeek:“星期一”,开放:“上午8点”,关闭:“下午5点”},{dayOfWeek:“星期二”,开放:“上午8点”,关闭:“下午5点”},{dayOfWeek:“星期三”,开放:“上午8点”,关闭:“下午6点”},{dayOfWeek:“星期四”,开放:“上午8点”,关闭:“下午5点”},{dayOfWeek:“星期五”,开放:“上午8点”,关闭:“下午5点”},{dayOfWeek:“星期六”,开放时间:“上午8:00”,关闭时间:“下午4:00”},
结果=数据.reduce((r,{dayOfWeek,open,close})=>{
如果(!r.length | | r[r.length-1]。打开!==打开| | r[r.length-1]。关闭!==关闭)
r、 推送({days:dayOfWeek,open,close});
其他的
r[r.length-1].days=r[r.length-1].days.split('-').slice(0,1).concat(dayOfWeek.join('-');
返回r;
}, []);
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
日期分组错误,小时也不正确。