Javascript Сортировать объект дней в сокращенном виде - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть объект будних дней. Как я могу отсортировать его в правильном порядке Дней недели, используя javascript.

Я также использую дату-Fns в приложении.

const INIT_SLOTS = {
  WED: [{startHour: ''}],
  SUN: [{startHour: ''}],
  MON: [{startHour: ''}],
  TUE: [{startHour: ''}],
  SAT: [{startHour: ''}],
  THU: [{startHour: ''}],
  FRI: [{startHour: ''}]
};

Ответы [ 3 ]

1 голос
/ 26 февраля 2020

Я думаю, без жесткого кодирования вы можете построить строки дней недели из JS Date в порядке сортировки. (солнце - сел), а затем получить доступ к предметам из вашего объекта. Проверьте следующий код, в результате вы получите массив элементов, отсортированный как c от начала и до конца дня недели.

const getWeekdayStrings = () => {
  const today = new Date();
  const dayms = 24 * 60 * 60 * 1000;
  const firstDay = new Date(today.getTime() - today.getDay() * dayms);

  const weekdays = new Array(7).fill(0).map((_, i) =>
    new Date(firstDay.getTime() + i * dayms)
      .toDateString()
      .split(" ")[0]
      .toUpperCase()
  );
  return weekdays;
};

const INIT_SLOTS = {
  WED: [{ startHour: "" }],
  SUN: [{ startHour: "" }],
  MON: [{ startHour: "" }],
  TUE: [{ startHour: "" }],
  SAT: [{ startHour: "" }],
  THU: [{ startHour: "" }],
  FRI: [{ startHour: "" }]
};

const sorted_slots = getWeekdayStrings().map(day => INIT_SLOTS[day]);

console.log(sorted_slots);
console.log(getWeekdayStrings());
1 голос
/ 25 февраля 2020

Вы можете взять объект с днями и значениями в требуемом порядке и отсортировать массив ключей, используя порядок дней.

const
    DAYS = { SUN: 1, MON: 2, TUE: 3, WED: 4, THU: 5, FRI: 6, SAT: 7 },
    INIT_SLOTS = { WED: [{ startHour: '' }], SUN: [{ startHour: '' }], MON: [{ startHour: '' }], TUE: [{ startHour: '' }], SAT: [{ startHour: '' }], THU: [{ startHour: '' }], FRI: [{ startHour: '' }] },
    KEYS = Object.keys(INIT_SLOTS);
    
KEYS.sort((a, b) => DAYS[a] - DAYS[b]);

console.log(KEYS);
0 голосов
/ 25 февраля 2020

изменение @ NinaScholz's решение

const INIT_SLOTS = {
  WED: [{ startHour: "" }],
  SUN: [{ startHour: "" }],
  MON: [{ startHour: "" }],
  TUE: [{ startHour: "" }],
  SAT: [{ startHour: "" }],
  THU: [{ startHour: "" }],
  FRI: [{ startHour: "" }]
};
const sortByWeek = (slots) => {
  const DAYS = { SUN: 1, MON: 2, TUE: 3, WED: 4, THU: 5, FRI: 6, SAT: 7 };

  const KEYS = Object.keys(slots);

  const sortedKeys = KEYS.sort((a, b) => DAYS[a] - DAYS[b]);
  const ordered = {};
  sortedKeys.forEach(function(day) {
    ordered[day] = slots[day];
  });
  return ordered;
};

sortByWeek(INIT_SLOTS);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...