для того чтобы пройти задание достаточно вот так описать программу, но в испытании не учтено несколько моментов, дело в том что в испытании дата всегда больше 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 weekDays = [‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’, ‘пятница’, ‘суббота’, ‘воскресенье’, ‘понедельник’, ‘вторник’, ‘среда’, ‘четверг’…]; - сложно дать определение этому массиву, это уже не дни недели, поэтому под данные это не очень подходит.
только параметр не очень хорошо переопределять, лучше завести переменную
и вернуть можно сразу выражение, без присвоения переменной, а то находите s и ниже тут же возвращаете.
Для каждого дня недели вы считаете одно и то же. Зачем тогда 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
Можно вставить весь код прямо в консоли браузера и проверить.
function getDayOfWeek(firstDay, requiredDay) {
var week = ['понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота', 'воскресенье'];
var requiredDayIndex = (week.indexOf(firstDay) + requiredDay - 1) % 7;
return week[requiredDayIndex];
}
// индексИскомогоДня = (индексПервогоДня + номерИскомогоДня - 1 (отнимаем 1 потому что первый день уже учтен в числе requiredDay, в противном случае будем считать его два раза)). Для значений, превышающих длину массива, узнаём индекс нужного нам дня с помощью остатка при делении на семь (соответствует количеству элементов массива): week[15] превратится в week [1], такой код помогает обойтись без циклов и добавления новых элементов в массив.
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];
};