Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Отформатировать объект по дням недели (https://javascript.ru/forum/misc/73045-otformatirovat-obekt-po-dnyam-nedeli.html)

kakadyi 16.03.2018 23:12

Цитата:

Сообщение от рони (Сообщение 480714)
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));

Уважаемый Рони,расскажите алгоритм решения,пожалуйста. А то слишком сложно для меня:)

рони 17.03.2018 00:20

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);
    //c && d если значения равны и хранилище пусто, сохраняем текущий ключ  e = a
   //  !c && d && (f[a] = b[a])  иначе если значения неравны и хранилище пусто сохраняем ключ и значение ключа в новом обьекте
   // (f[e + "-" + a] = b[a], e = void 0)   иначе если значения неравны и хранилище непусто сохраняем значение из хранилища + ключ и значение ключа в новом обьекте
   // и обнуляем хранилище
    return f; //возращаем обьект {} для следующей итерации
  }, {});
};
var output =  fn(obj);
alert(JSON.stringify(output));


оператор-вопросительный-знак
reduce
object-keys-obj
сериализация-метод-json-stringify

kakadyi 17.03.2018 00:35

рони,
Спасибо!


Часовой пояс GMT +3, время: 15:48.