Отформатировать объект по дням недели
Здравствуйте!
Есть определенный объект с графиками работы: { 'пн': '7:00-19:00', 'вт': '9:00-19:00', 'ср': '9:00-19:00', 'чт': '9:00-19:00', 'пт': '9:00-19:00', 'сб': '10:00-15:00', 'вс': '10:00-15:00' } Необходимо привести данный объект к следующему виду: { 'пн': '7:00-19:00', 'вт-пт': '9:00-19:00', 'сб-вс': '10:00-15:00', } При этом графики работы и дни могут быть различными. Не могу придумать алгоритм...Подскажите,с чего начать. |
kakadyi,
откажитесь от обьекта, лучше массив обьектов . алгоритмы решения подобных задач по ссылке ниже http://javascript.ru/forum/misc/7245...ie-yandex.html |
Вроде работает.
var shedule={ 'пн': '7:00-19:00', 'вт': '9:00-19:00', 'ср': '9:00-19:00', 'чт': '9:00-19:00', 'пт': '9:00-19:00', 'сб': '10:00-15:00', 'вс': '10:00-15:00' }, __week_days=['пн','вт','ср','чт','пт','сб','вс'], response=Object.keys(shedule).map(function(day){ return { day:day, worktime:shedule[day] }; }).sort(function(a,b){ return __week_days.indexOf(a.day)-__week_days.indexOf(b.day); }).reduce(function(res,item,index,list){ var row={from:item.day,to:void 0,worktime:item.worktime}; if(!res.length) return [row]; if(res[res.length-1].worktime==item.worktime) res[res.length-1].to=item.day; else res.push(row); return res; },[]).reduce(function(res,item){ res[item.from+(item.to?'-'+item.to:'')]=item.worktime; return res; },{}); console.log(response); |
обьект соединение диапазонов
kakadyi,
шифровка из центра ... var obj = { 'пн': '7:00-19:00', 'вт': '9:00-19:00', 'ср': '9:00-19:00', 'чт': '9:00-19:00', 'пт': '9:00-19:00', 'сб': '10:00-15:00', 'вс': '10:00-15:00' } function fn(b) { var e = void 0; return Object.keys(b).reduce(function(f, a, c, d) { c = b[a] == b[d[++c]]; d = void 0 === e; c && d ? e = a : c || d ? !c && d && (f[a] = b[a]) : (f[e + "-" + a] = b[a], e = void 0); return f; }, {}); }; var output = fn(obj); alert(JSON.stringify(output)); |
Цитата:
Просто моё уважение,умеете,могёте:) |
рони, сортировку, наверное, все-таки стоит добавить.
var obj = { 'ср': '9:00-19:00', 'пн': '7:00-19:00', 'вт': '9:00-19:00', 'чт': '9:00-19:00', 'пт': '9:00-19:00', 'сб': '10:00-15:00', 'вс': '10:00-15:00' }; function fn(b) { var e = void 0; return Object.keys(b).reduce(function(f, a, c, d) { c = b[a] == b[d[++c]]; d = void 0 === e; c && d ? e = a : c || d ? !c && d && (f[a] = b[a]) : (f[e + "-" + a] = b[a], e = void 0); return f; }, {}); }; alert(JSON.stringify(fn(obj))); |
У рони вообще шедевр:)Лаконично,красиво.
|
Цитата:
обьект желательно с нужной структурой или что лучше массив тоже с нужной структурой. и вопрос имея __week_days=['пн','вт','ср','чт','пт','сб','вс'], зачем тогда Object.keys(shedule)? |
Цитата:
var obj = { 'ср': '9:00-19:00', 'пн': '7:00-19:00', 'вт': '9:00-19:00', 'чт': '9:00-19:00', 'пт': '9:00-19:00', 'сб': '10:00-15:00', 'вс': '10:00-15:00' }; function fn(b) { var e = void 0; return ['пн','вт','ср','чт','пт','сб','вс'].reduce(function(f, a, c, d) { c = b[a] == b[d[++c]]; d = void 0 === e; c && d ? e = a : c || d ? !c && d && (f[a] = b[a]) : (f[e + "-" + a] = b[a], e = void 0); return f; }, {}); }; alert(JSON.stringify(fn(obj))); |
Цитата:
{ 'ср': '9:00-19:00', 'пн': '7:00-19:00', 'чт': '9:00-19:00', 'пт': '9:00-19:00', 'сб': '10:00-15:00', 'вс': '10:00-15:00', 'аб': '10:00-15:00', 'бц': '10:00-15:00', 'цд': '10:00-15:00' }; |
Часовой пояс GMT +3, время: 20:53. |