Какой сегодня день?


#24

Пока решал эту задачу, несколько раз возникала мысль, что наверняка есть способ попроще, строчки на 3-4. Но как с самого начала мне пришло в голову, что надо через новый массив делать, так и не отступала. Когда прошел испытание и заглянул на форум, засмеялся — увидел способ с остатком от деления. 4 строчки.
Скажите, имеет право на жизнь такой способ? (работает)

Через создание нового массива
var days = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];

var getDayOfWeek = function (weekday, chosenDay) {
  var daysArr = [];
  
  if (chosenDay < 1 || chosenDay > 31) {
    return 'введите значение от 1 до 31';
  }
  
  for (var i = 0; i < days.length; i++) {
    var shift = days.indexOf(weekday) + i;
    if (shift < days.length) {
      daysArr.push(days[shift]);
    } else {
      daysArr.push(days[shift - days.length]);
    }
    for (var j = 0; j < chosenDay; j++) {
      if (chosenDay > days.length) {
        chosenDay -= days.length;  
      }
    }
  }
  console.log(daysArr);
  return daysArr[chosenDay - 1];
}

Если он имеет право на жизнь, то может есть, что улучшить?


#25

Конкретно под условия задачи и если у пользователя нет возможности ошибиться(кнопочки там с днями недели у первого числа и список с числом месяца), то подойдет вот такое решение
var getDayOfWeek = function(firstDayOfWeek, number){
var dayOfWeek = [‘понедельник’,‘вторник’,‘среда’,‘четверг’,‘пятница’,‘суббота’,‘воскресенье’];
return dayOfWeek[(dayOfWeek.indexOf(firstDayOfWeek) - 1 + number) % 7];
}


#26

Привет, а у меня вот так вот получилось. Вроде бы даже очень компактно, мне это прям нравится!

var getDayOfWeek = function(weekDay, number) {
  var weekDays = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
  
  for (var i = 0; i < 7; i++) {
    if (weekDay === weekDays[i]) {
      return(weekDays[(i + number - 1) % 7]); 
    }
  }
}

#27

Решенька без циклов и условий:

Сводка

var getDayOfWeek = function(weekday, data) {
var weekDayS=[‘понедельник’,‘вторник’,‘среда’,‘четверг’,‘пятница’,‘суббота’,‘воскресенье’];
var count =weekDayS.indexOf(weekday)+ data%7-1;
return weekDayS[count];
}


#28

Попробуйте вызвать: getDayOfWeek(‘понедельник’, 7);


#29

все-таки придется добавить условие


#30

нет, не придется =) подумайте, нужно чуть изменить работу с остатком


#31

да, что-то сразу в голову не пришло)

итог

(weekDayS.indexOf(weekday)-1 + data)%7;


#32

Блин полчаса пытался решить с отрицательными индексами массива (по пути питонщика), чтобы решить проблему выхода за пределы максимально индекса, пока осознал что в чертовом js нет отрицательных индексов в обычном понимании, и нельзя закольцевать массив таким образом…насколько же питон в этом плане удобнее!
Но в итоге оказалось что в проверку вообще не добавили такой вариант где в итоге приходилось бы выходить за границы массива и работает даже не до конца правильное решение:

var getDayOfWeek = function (firstDay, requiredDate) {

var week = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
var day = week.indexOf(firstDay);
var sediment = requiredDate % 7 - 1;
var wantedDay = week[day + sediment];
return wantedDay;
};

То есть, если мы возьмем первый день воскресенье, а дату, например 20 число. То остаток от деления будет 20 % 7 = 5. Далее 5-1 = 4. И будем искать в массиве элемент с индексом 6 (изначальный индекс воскресенья) + 4 = 10, которого там нет…

Решается, путем добавления проверки, если выходим за 6 в итоге, то вычитаем из финального индекса 7:

var getDayOfWeek = function (firstDay, requiredDate) {

var week = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
var day = week.indexOf(firstDay);
var sediment = requiredDate % 7 - 1;
var index = day + sediment;
if (index > 6) {
index -= 7;
}
var wantedDay = week[index];
return wantedDay;
};

#33

велосипед придумали. без колес, зато на гусеницах. нафига брать остаток от даты, чтобы потом оперировать с ним? остаток и должен быть индексом элемента словаря.


#34

хм. а если с проверкой?
var getDayOfWeek = function(firstDayOfMounth, DayOfWeek){
var week = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’]
currentDay = week.indexOf(firstDayOfMounth) + (DayOfWeek % 7 - 1);
if (currentDay < 0){
currentDay = week.indexOf(firstDayOfMounth) + 6;
}
return week[currentDay];
}


#35
В 2 строчки вышло, хотя сначала думал делить массив на части и менять в нем элементы))
const daysOfWeek = [
   'понедельник',
   'вторник',
   'среда',
   'четверг',
   'пятница',
   'суббота',
   'воскресенье'
]; 

const getDayOfWeek = (firstDay, dayToFind) => {
  const dayToCount = daysOfWeek.findIndex(el => el === firstDay) - 1;
  return daysOfWeek[dayToFind % 7 + dayToCount];
};