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

Смог только через массив(((

let getDayOfWeek = function (dayStart, numberFind){
//стартовый массив
let daysArray = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’];

//индекс старта в массиве daysArray
let indexDayStart = daysArray.indexOf(dayStart);

//пустой массив для новой группировки
let myArray = [];

//цикл для наполнения массива myArray элементами после текущего индекса(dayStart) включая текущий индекс(dayStart)
for (let i = indexDayStart; i <=daysArray.length-1; i++ ){
myArray.push(daysArray[i])
};

//цикл для наполнения массива myArray элементами до текущего индекса(dayStart)
if (myArray.length != 7){
for (let j = 0; j < indexDayStart;j++){
myArray.push(daysArray[j])
}
};
//теперь массив myArray готов и начинается с dayStart
//Будем сокращать numberFind до тех пор, пока не сможем этим значением двигаться по массиву myArray (>=1&&<=7)

while (numberFind > 7){
numberFind-=7;
};

//Но наш преобразованный numberFind - это порядковый номер элемента в массиве, поэтому сделаем индекс
let numberFindIndex = numberFind-1;

//готово
return myArray[numberFindIndex];
}

let week = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’]
let getDayOfWeek = function(firstDay, dayOfWeek) {
let index = week.indexOf(firstDay)
let offset = dayOfWeek + index
let i = offset % 7 - 1
if (i < 0) {
i = 6
}
return week[i]
}

var dayStr = {
1: ‘понедельник’,
2: ‘вторник’,
3: ‘среда’,
4: ‘четверг’,
5: ‘пятница’,
6: ‘суббота’,
7: ‘воскресенье’
}
var dayNumber = {
‘понедельник’: 1,
‘вторник’: 2,
‘среда’: 3,
‘четверг’: 4,
‘пятница’: 5,
‘суббота’: 6,
‘воскресенье’: 7
}
var getDayOfWeek = function(dayOfWeek, dayOfMonth) {
dayOfWeek = dayNumber[dayOfWeek];
for(var i = 1; i <= dayOfMonth; i++) {
if(dayOfWeek === 7 && i !== dayOfMonth ) {
dayOfWeek = 0;
}
if(i !== dayOfMonth){
dayOfWeek++;
}
}
return dayStr[dayOfWeek];
}

Мое решение задачи

let getDayOfWeek = function(firstDay, dayWeek){
  
  let days = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
  
  let indexDay = days.indexOf(firstDay);
  dayWeek -= 1;

  return days[(dayWeek + indexDay) % 7];
}

Я так сразу решил, логика почти идентичная :roll_eyes:

let getDayOfWeek = function(firstDay, dayWeek){
  
  let days = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
  
  let indexDay = days.indexOf(firstDay);
  dayWeek -= 1;

  return days[(dayWeek + indexDay) % 7];
}

let getDayOfWeek = function(day, number){
let week = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’];
let tre = ((week.indexOf(day) + number ) % 7)-1;
if(tre==-1){tre=6}
return week[tre];
}

let week=[‘понедельник’,‘вторник’,‘среда’,‘четверг’,‘пятница’,‘суббота’,‘воскресенье’,‘понедельник’,‘вторник’,‘среда’,‘четверг’,‘пятница’,‘суббота’];

let getDayOfWeek=function(first,date){
let firstNumberIndex=week.indexOf(first)

return week[firstNumberIndex+date%7-1]
}
getDayOfWeek(‘воскресенье’,11)

/* чтобы избаиться от условия просто дописал еще одну неделю в массив. на случай если первый день выпадает на воскреснье */

Нашел решение в том, что бы массив сам наполнялся сколько ему нужно от условия и после просто найти день который нам нужен их условия

function getDayOfWeeke(a , b) {

let array1 = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье']

let start = array1.indexOf(a)

for (let i = 0; i <= b; i++) {

    let swap = array1[i]

    array1.push(swap)

    }

let finih = array1[start + b - 1]

return finih

}

getDayOfWeeke(‘суббота’, 21)

Мой код с использованием 'for' и 'if'
function getDayOfWeek(dayOfTheFirst, numberOfTheDay) {


  let weekDays = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
    for (let i = 0; i <= weekDays.length; i++) {
      if (weekDays[i] === dayOfTheFirst) {
        return weekDays[(i - 1 + numberOfTheDay) % 7 ];
      }
    }
    
}
function getDayOfWeek(firstDayOfMonth, randomDayOfMonth) {
  let days = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
  
  let firstDay = days.indexOf(firstDayOfMonth);
  let randomDay = randomDayOfMonth % 7 - 1;
  let randomDayShift = randomDay + firstDay;
  
  if (randomDayShift > days.length) {
    randomDayShift -= days.length;
  }

  return days[randomDayShift];
}

getDayOfWeek('пятница', 31);

Решение одно из самых понятных на мой взгляд.

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

Я смог понять как это работает, но не смог понять как до этого можно додуматься. Фу аж комплексы появляются после такого.
имею ввиду именно уравнение для индекса нужного

Мой код:
function getDayOfWeek(firstDay,numDay) {
let week = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’];
numDay = (numDay + week.indexOf(firstDay) - 1) % 7;
return week[numDay];
}

const getDayOfWeek = (firstDayOfWeek, currentDay) => {
let daysOfWeek=[‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’];
let i = daysOfWeek.indexOf(firstDayOfWeek);
let currentI = i+currentDay-1;
while(!daysOfWeek[currentI]) {
currentI-=7;
}
return daysOfWeek[currentI];

};

Решил таким вот образом, как-то громоздко получилось, но я же еще учусь и не отличаюсь особым умом и сообразительностью))))

Спойлер
let dayOfWeek = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
let day;
let count;
let daysCount;
let total;
let dayStart = 0;
let numberStart;

let getDayOfWeek = function(day, number) {
  for (let i = 0; i <= dayOfWeek.length - 1; i++) {
    dayStart++;
    if (day ===  dayOfWeek[i]) {
      day = dayOfWeek[i];
      numberStart = dayStart - 2;
    }
  }

  count = numberStart;
  daysCount = 0;
  
  while(true) {
    dayOfWeek[count];
    daysCount++;
    count++;
    if (count === dayOfWeek.length) {
      count = 0;    
    }
    if (number === daysCount) {
      total = dayOfWeek[count];  
    }
    if (daysCount === 31) {
      break;
    }
  }

  return total;  
};
let getDayOfWeek = function(dayWeek, number) {
  let array = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
  
let index = array.indexOf(dayWeek);
let sumDays = (index + (number - 1)) % 7;

return array[sumDays];
};
1 лайк

На элегантность не претендую особенно после прошлого комментатора. Уже разобрался что 1 цикл заменяется indexOf

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

function getDayOfWeek(firstDay, number) {

let week = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’];

let i = (week.indexOf(firstDay) + --number) % 7;

return week[i];

};

2 лайка

Я ночевал с этой задачей в голове, но с утра меня рассмешил костыль, который решает все проблемы :smiling_face_with_tear:

Намеренно не буду доводить до ума, потому что это правда очень смешно:

function getDayOfWeek(weekDay, dayDesired) {
    dayDesired--; // Забавно, правда? =)
    
    const weekNames = [
    'понедельник',
    'вторник',
    'среда',
    'четверг',
    'пятница',
    'суббота',
    'воскресенье'
  ];
  
  let numWeekDay = weekNames.indexOf(weekDay);
  
  if (numWeekDay > 6 || numWeekDay < 0) throw new Error('week day must be from 0 to 6');
  
  if (dayDesired > 6) {
     while (dayDesired / 7 >= 1) {
       dayDesired -= 7;
     }
  }
  
  if (dayDesired === 0) {
    return weekNames[numWeekDay];  
  } else if (dayDesired <= 6 && numWeekDay > 0) {
    dayDesired += numWeekDay;
    if (dayDesired > 6) dayDesired -= 7;
  }
  
  return weekNames[dayDesired];  
}

getDayOfWeek('четверг', 2);

Я ожидал, что все и всё считают с нуля, раз уж на то пошло и не был доволен, что в тестах день всегда странным образом неправильный, но ровно на один назад :smiling_face_with_tear: