使用多个条件或Java或Javascript简化变量的条件

时间:2019-04-11 01:54:36

标签: javascript

我有以下代码,我想知道是否有更好的方法来简化它。
我需要使用简单的数据结构(是的,每个等等)

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;
}


谢谢!

4 个答案:

答案 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)

另一条建议将您的逻辑重写为一行:

  1. 使用undefined检查month % 2 == +(month <= 7)
  2. 使用31检查month == 2
  3. 使用28检查30
  4. 其余为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);
}
相关问题