#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);