Создайте массив лет с дубликатами каждого года помеченный сезон

#javascript #arrays #typescript

Вопрос:

Как мне динамически генерировать массив лет, начиная с 2004 по текущий год, с каждым годом, помеченным «Весной» и «Осенью», как на прилагаемом рисунке?

введите описание изображения здесь

Спасибо!

Комментарии:

1. Что вы пробовали и где вы столкнулись с проблемой/проблемой?

2. Я смог сгенерировать список лет только с помощью цикла for, но пытался найти способ добавления сезонов

Ответ №1:

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

 function generateArrayWithSeason(start) {
  return Array(new Date().getFullYear()   1 - start)
    .fill("")
    .flatMap((_, i) => [`${start   i} SPRING`, `${start   i} FALL`]);
}

console.log(generateArrayWithSeason(2004)); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

Если вы хотите получить результаты по данным за текущий год spring и fall

весна продлится с 1 марта по 31 мая

осень (осень) проходит с 1 сентября по 30 ноября

 function generateArrayWithSeason(start) {
  const month = new Date().getMonth();
  let currentYear = new Date().getFullYear();
  const springMonths = [3, 4, 5];
  const fallMonths = [9, 10, 11];

  return Array(currentYear   1 - start)
    .fill("")
    .flatMap((_, i) => {
      if (currentYear === start   i) {
        if (springMonths.includes(month)) return [`${start   i} SPRING`];
        if (fallMonths.includes(month)) return [`${start   i} FALL`];
      }
      return [`${start   i} SPRING`, `${start   i} FALL`];
    });
}

console.log(generateArrayWithSeason(2004)); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

Комментарии:

1. Я не мог понять, почему кто-то отклонил мой ответ, даже не объяснив причину.

2. Возможно, это произошло потому, что ваш ответ не генерирует осень/весну текущего года (на момент написания статьи) или не включает весну/осень, когда они еще не произошли.

Ответ №2:

Следующий код вернет массив строк, содержащих "<year> <SPRING/FALL>" начиная с 2004 года до текущей даты, не включая весенние или осенние сезоны текущего года, если они не произошли.

 const seasons = {
  2: 'SPRING',
  8: 'FALL',
};
const now = new Date();
const output = [];
for (let current = new Date(2004, 2, 1); current <= now; current.setMonth(current.getMonth()   6)) {
  output.push(`${current.getFullYear()} ${seasons[current.getMonth()]}`);
}
console.log(output);