![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
16.03.2018, 20:59
|
Интересующийся
|
|
Регистрация: 08.06.2017
Сообщений: 10
|
|
Отформатировать объект по дням недели
Здравствуйте!
Есть определенный объект с графиками работы:
{ 'пн': '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',
}
При этом графики работы и дни могут быть различными.
Не могу придумать алгоритм...Подскажите,с чего начать.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
16.03.2018, 21:32
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
kakadyi,
откажитесь от обьекта, лучше массив обьектов .
алгоритмы решения подобных задач по ссылке ниже
Тестовое задание Yandex
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
16.03.2018, 21:33
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,800
|
|
Вроде работает.
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);
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
16.03.2018, 22:00
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
обьект соединение диапазонов
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));
Последний раз редактировалось рони, 16.03.2018 в 22:09.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
16.03.2018, 22:08
|
Интересующийся
|
|
Регистрация: 08.06.2017
Сообщений: 10
|
|
Сообщение от Nexus
|
Вроде работает.
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);
|
После такого мне в свой код смотреть не хочется...
Просто моё уважение,умеете,могёте ![](https://javascript.ru/forum/images/smilies/smile.gif)
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
16.03.2018, 22:08
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,800
|
|
рони, сортировку, наверное, все-таки стоит добавить.
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)));
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
16.03.2018, 22:09
|
Интересующийся
|
|
Регистрация: 08.06.2017
Сообщений: 10
|
|
У рони вообще шедевр ![](https://javascript.ru/forum/images/smilies/smile.gif) Лаконично,красиво.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
16.03.2018, 22:15
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
Сообщение от Nexus
|
все-таки стоит добавить.
|
сортировка тут неуместна!!!
обьект желательно с нужной структурой или что лучше массив тоже с нужной структурой.
и вопрос имея __week_days=['пн','вт','ср','чт','пт','сб','вс'],
зачем тогда Object.keys(shedule)?
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
16.03.2018, 22:21
|
![Аватар для рони](https://javascript.ru/forum/image.php?u=7416&dateline=1372796129) |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
Сообщение от Nexus
|
сортировку, наверное, все-таки стоит добавить.
|
добавил
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)));
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
16.03.2018, 22:50
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,800
|
|
Сообщение от рони
|
и вопрос имея __week_days=['пн','вт','ср','чт','пт','сб','вс'],
зачем тогда Object.keys(shedule)?
|
Хотел, чтобы код переварил любой объект, который ему дадут, даже подобный (вторник пропущен):
{
'ср': '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'
};
|
|
|
|