Как в JS прочередовать цвета по дням месяца по очереди (месяца приходят в параметрах)

В функцию прилетает рандомное количество аргументов с количеством дней в месяце (например, (31, 30, 31)). Необходимо разбить все месяца на дни и присвоить каждому дню нужный цвет в формате День 1 - Цвет. Условие: цвет должен меняться через день. Также в условиях проверки мы обязательно должны использовать как число, так и месяц. Вот то что у меня получилось

function colorToDay() {
  let arr = [];

  // создаем цикл по месяцам, внутри этого цикла с каждого месяца достаем число и присваиваем ему цвет 
  // (если число четное - синий, если нечетное - желтый), после этого пушим в массив
  for (let x = 0; x < arguments.length; x++) {
    for (let i = 1; i <= arguments[x]; i++) {
      if (i % 2 === 0) {
        arr.push(`День ${i} - Синий`)
      } else {
        arr.push(`День ${i} - Желтый`)
      }
    }
  }

  // выводим массив в консоль
  for (let n of arr) {
    console.log(n);
  }
  return 'finish'
}

console.log(colorToDay(31, 30, 31));

Проблема в том, что когда в месяце 31 день, то день заканчивается на Желтый цвет, а следующий месяц тоже начинается на Желтый, что нарушает условия задачи (цвета должны чередоваться). Чего не хватает?


Ответы (1 шт):

Автор решения: Pavel Nazarian

function colorToDay() {
  let arr = [];

  // создаем цикл по месяцам, внутри этого цикла с каждого месяца достаем число  
  for (let x = 0; x < arguments.length; x++) {
    for (let i = 1; i <= arguments[x]; i++) {      
        arr.push(`День ${i}`);      
    }
  }
  
  //в общем массиве по четности индекса присваиваем цвет
  let new_arr = arr.map((item,index) => {   
        return (index%2 == 0) ? item+' - желтый' : item+' - синий'
  });

  // выводим массив в консоль
  for (let n of new_arr) {
    console.log(n);
  }
  return 'finish'
}

console.log(colorToDay(31, 30, 31));

→ Ссылка