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

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

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

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

var getDayOfWeek = function(day, numberDay) {
  var week = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
  var dayIndex = 0;
  var startDayIndex = week.indexOf(day);
  if (numberDay >= 7) {
    dayIndex = startDayIndex + (numberDay % 7) - 1;
  } 
  if (numberDay >= 7 && startDayIndex + numberDay % 7 > week.length) {
    dayIndex = startDayIndex - (numberDay % 7);
    } 
  if (numberDay < 7 && startDayIndex + numberDay <= week.length) {
    dayIndex = startDayIndex + numberDay - 1;
  } 
  if (numberDay < 7) {
    dayIndex = numberDay - startDayIndex;
  }
  if (dayIndex < 0) {
    dayIndex = dayIndex * (-1);
  }
  return week[dayIndex];
}
3 лайка

перепроверил еще ряд вариантов, и пришлось дополнить код:

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

  if (numberDay < 7 && startDayIndex + numberDay >= week.length) {
    dayIndex = startDayIndex - ((startDayIndex + numberDay) - 7);
  } 
  if (dayIndex < 0) {
    dayIndex = dayIndex * (-1);
  }
  return week[dayIndex];
}

испытание конечно же он проходит по параметрам в испытании, и в том и в этом варианте, но в испытании далеко не все варианты учтены. Возможно можно сделать иначе и короче, интересно у кого как выйдет.

Разве Мы УЖЕ не умеем “дописывать массив”…?
893f28a8f389c4f8044444444

точно, молодец !

Добавлять что-то к эталонным дням недели не кажется хорошей затеей.

на форумах нынче не аргументируют?

Если неделя превышена, то она опять начнется с понедельника, а для определения дня недели нас опять интересует остаток.

var rest = steps % 7; 
var thatDay =  week[rest];

можно и через “остаток”…


Почему? Где об этом почитать?

Есть вполне определенные и понятные данные - дни недели и кроме их названий нам на самом деле ничего ведь и не нужно. Поэтому дописывать в дни недели опять же эти же дни недели, цикл для этого создавать - довольно лишнее занятие.

var weekDays = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’, ‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’…]; - сложно дать определение этому массиву, это уже не дни недели, поэтому под данные это не очень подходит.

1 лайк

var getDayOfWeek = function(firstDay, day) {

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

day += days.indexOf(firstDay)-1;
s = days[day % 7]
return s;
}

8 лайков

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

1 лайк
код

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

2 лайка


Попробовал сделать через SWITCH. вроде работает.

Для каждого дня недели вы считаете одно и то же. Зачем тогда switch? (если понедельник, то 2+2, если вторник, то 2+2…)
И еще определение дня недели (когда вы находите остаток от деления на 7) у вас не учитывает день начала месяца.
Чтобы проверить работу программы можно вынести массив из функции:
var week = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];

var getDayOfWeek = function(dayOfWeek, date) {
	var a = date % 7 - 1;
	var day = '';

	switch(dayOfWeek) {
        case 'понедельник':
			day = week[week.indexOf(dayOfWeek) + a];
			break;
		case 'вторник':
			day = week[week.indexOf(dayOfWeek) + a];
			break;
		case 'среда':
			day = week[week.indexOf(dayOfWeek) + a];
			break;
		case 'четверг':
			day = week[week.indexOf(dayOfWeek) + a];
			break;
		case 'пятница':
			day = week[week.indexOf(dayOfWeek) + a];
			break;
		case 'суббота':
			day = week[week.indexOf(dayOfWeek) + a];
			break;
		case 'воскресенье':
			day = week[week.indexOf(dayOfWeek) + a];
			break;
	}

	return day;
}

и для каждого дня недели вызвать функцию и передать в нее дату - от 1 до 31, например.

for (var i = 0; i < week.length; i++) {
	for (var j = 1; j <=31; j++) {
		console.log('день начала месяца: ' + week[i], ' число: ' + j, 'искомый день недели: ' + getDayOfWeek(week[i], j));
	}
}

и посмотреть где у вас вернется undefined.

день начала месяца: воскресенье число: 1 искомый день недели: воскресенье
день начала месяца: воскресенье число: 2 искомый день недели: undefined
день начала месяца: воскресенье число: 3 искомый день недели: undefined
день начала месяца: воскресенье число: 4 искомый день недели: undefined
день начала месяца: воскресенье число: 5 искомый день недели: undefined
день начала месяца: воскресенье число: 6 искомый день недели: undefined

Можно вставить весь код прямо в консоли браузера и проверить.

image

1 лайк
Ответ
function getDayOfWeek(firstDay, requiredDay) {
  var week = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
  var requiredDayIndex = (week.indexOf(firstDay) + requiredDay - 1) % 7;
  return week[requiredDayIndex];
}

// индексИскомогоДня = (индексПервогоДня + номерИскомогоДня - 1 (отнимаем 1 потому что первый день уже учтен в числе requiredDay, в противном случае будем считать его два раза)). Для значений, превышающих длину массива, узнаём индекс нужного нам дня с помощью остатка при делении на семь (соответствует количеству элементов массива): week[15] превратится в week [1], такой код помогает обойтись без циклов и добавления новых элементов в массив.

14 лайков
Вариант
var getDayOfWeek = function (x, y) {
  var week = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье']; 
  var shift = week.indexOf(x);
  var z = 0;
  if (y > 7) {
    z = y % 7 + shift - 1;
  } else {
    z = y + shift - 1;
  }
  return week[z];
};

Я сделаль :space_invader:

var getDayOfWeek = function (firstDayOfMonth, dayNumber){

var days = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
var dayOfWeek = '';
var firstDayIndex = days.indexOf(firstDayOfMonth) - 1; 

if ( dayNumber % 7 === 0 ) {
  
  dayOfWeek = days[firstDayIndex];
  
} else if ( dayNumber < 7 && firstDayIndex + dayNumber >= days.length ){
  
  dayOfWeek = days[Math.abs( firstDayIndex + dayNumber - days.length )];

} else {
  
  var dayOfWeekIndex = dayNumber % 7;
  dayOfWeek = days[firstDayIndex + dayOfWeekIndex];
  
}

return dayOfWeek;

};

@yshmatlay
neededDay - что за зверь?

Сводка

не пробовали почитать объяснение Какой сегодня день? ?
кажется, что можно оптимизировать.

не шарите, она "сделяль"

Изменила название параметра функции с neededDay на dayNumber и провтыкала исправить в первой ветке проверки :astonished:

Прочитала вот… да, красивенько) но я до этого не додумалась :grin:

1 лайк