我有以下代码,我想知道是否有更好的方法来简化它。
我需要使用简单的数据结构(是的,每个等等)
function amountDayMonth(month) {
let amountDayMonth
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
amountDayMonth = 31;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
amountDayMonth = 30;
} else if(month == 2) {
amountDayMonth = 28;
}
return amountDayMonth;
}
谢谢!
答案 0 :(得分:2)
到目前为止,最简单的解决方案是滥用Date对象
function amountDayMonth(month) {
return new Date(2019, month, 0).getDate();
}
month是基于0的,因此使用month,您要在下个月创建第0天的日期,这是该月的最后一天..这是月份的长度
如果是a年,则需要修复2月
或
function amountDayMonth(year, month) {
return new Date(year, month, 0).getDate();
}
console.log(amountDayMonth(2019, 4)); // 30
console.log(amountDayMonth(2019, 2)); // 28
console.log(amountDayMonth(2020, 2)); // 29
console.log(amountDayMonth(2019,12)); // 31
完成
不需要或不需要
答案 1 :(得分:1)
另一条建议将您的逻辑重写为一行:
undefined
检查month % 2 == +(month <= 7)
31
检查month == 2
28
检查30
function amountDayMonth(month)
{
return (Number.isInteger(month) && month >= 1 && month <= 12) ? (month % 2 == +(month <= 7) ? 31 : (month == 2 ? 28 : 30)) : undefined
}
[0,1,2,3,4,5,6,7,8,9,10,11,12,13].forEach(x=>console.log(amountDayMonth(x)))
const elements
答案 2 :(得分:0)
您可以预置和排列并检查它的期望值,如下所示:
const expectedMonths = [1,3,5,7,8,10,12];
if (expectedMonths.indexof(month)>-1) {
amountDayMonth = 31;
}
或者因为您的数据几乎是静态的,所以只需有一个现有的值表
let amountDayMonth = month => [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]
答案 3 :(得分:0)
您可以使用数组查找。显示Java示例,因为您已指出要这么做。
private static final int[] DAYS = {31,28,31,30,31,30,31,31,30,31,30,31};
public int amountDayMonth(int month) {
return DAYS[month - 1];
}
如果您不喜欢这样的数组,则可以使用三元运算符:
public int amountDayMonth(int month) {
return (month == 2 ? 28 : month == 4 || month == 6 || month == 9 || month == 11 ? 30 : month >= 1 && month <= 12 ? 31 : 0);
}