Отформатировать объект по дням недели
Здравствуйте!
Есть определенный объект с графиками работы:
{ 'пн': '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, время: 12:33. |