Javascript - Получить «Понедельник» с «понедельника» или «Вторник» с «вт», и т. Д. [Закрыто]

1

Есть ли правильный способ захватить название дня, когда у вас короткая версия, например:

mon
tue
wed
thu
fri
sat
sun

Мне не нужна фактическая "дата" или время или что-то еще, мне просто нужна строка для имени полной даты.

  • 0
    Да, объект карты, например.
  • 0
    Словарь может быть? Что-то вроде days={mon:"Monday", etc...} , Затем days["mon"] дает "Monday" .
Показать ещё 1 комментарий
Теги:

4 ответа

8

Достаточно простого словаря ассоциативного массива (read object):

var days = {
  'mon': 'Monday',
  'tue': 'Tuesday',
  'wed': 'Wednesday',
  'thu': 'Thursday',
  'fri': 'Friday', 
  'sat': 'Saturday',
  'sun': 'Sunday'
}

Теперь вы можете получить к ним доступ следующим образом:

var day  = 'mon',
    full = days[day]; // full === 'Monday';
  • 0
    Почему бы не использовать функцию с некоторыми параметрами switch(dayNameShort): { case X: return Y }, case ... , чтобы вы могли обрабатывать ложные значения и писать для нее тесты? Я думаю, что правильное наименование должно быть частью хорошего ответа тоже. Почему бы не назвать вашего партнера. массив shortDayNameToLong или что-то подобное? Или даже так - у вас может быть родительский объект DayNameConverter а объект текущих days именем shortToLong использовать его как DayNameConverter.shortToLong[myShortDayName] ? Просто возиться с вариантами здесь.
  • 0
    Иногда есть компромисс между простотой и накладными расходами. Конечно, операторы переключения будут работать медленнее, как и функции (с дополнительными издержками). Согласитесь, если существует вероятность того, что i18n является требованием, требуется более надежное решение, но, похоже, это решение вполне удовлетворит вопрос OP, без какой-либо дополнительной сложности или снижения скорости.
Показать ещё 2 комментария
2

небольшое улучшение ответа @BenM

var Days = {
  'mon': 'Monday',
  'tue': 'Tuesday',
  'wed': 'Wednesday',
  'thu': 'Thursday',
  'fri': 'Friday', 
  'sat': 'Saturday',
  'sun': 'Sunday',
   getFullName: function(day) {
    return this[day];
   }
}

Days.getFullName("mon");
0

В JS с ES6 фактически объект Map является правильным способом выполнения этого задания, поскольку он более эффективен, чем доступ к объекту. Очень упрощенная реализация заключается в следующем:

var days = new Map([["mon", 'Monday'],
                    ["tue", "Tuesday"],
                    ["wed", "Wednesday"],
                    ["thu", "Thursday"],
                    ["fri", "Friiday"],
                    ["sat", "Saturday"],
                    ["sun", "Sunday"]
                    ]);
console.log(days.get("thu"));
  • 0
    Есть ли у вас показатели относительной эффективности? Это гораздо менее читабельно. Кроме того, Map существует в первую очередь для поддержки варианта использования, где в качестве ключей используются не-строки
  • 0
    @Aluan Haddad Я провел сравнение по удалению дубликатов массивов ... Карта выглядит лучше на 50%, когда дубликатов не так много, и в этом случае у нас нет дубликатов.
Показать ещё 5 комментариев
0

@BenM уже добавил ответ. Просто расширяя свой ответ,

var days = {
  'mon': 'Monday',
  'tue': 'Tuesday',
  'wed': 'Wednesday',
  'thu': 'Thursday',
  'fri': 'Friday', 
  'sat': 'Saturday',
  'sun': 'Sunday'
}

var shortDays = ['mon','tue','wed','thu','fri','sat','sun'];


var getFulldays = shortDays.map(function(day){
  return days[day]
})

console.log(getFulldays)


 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню