0

如果日期的总数与查找变量匹配,我尝试制作一个可以返回日期的程序。日期 01/08/1996 的总数为 = 34 ..(ie) 0+1+0+8+1 +9+9+6 = 34;请告诉我我哪里出错了。

    var find = 25;

    for (var year = 2010 ; year <= 2019 ; year++){
        for (var month = 1 ; month <=12 ; month++){
            var dateLength;
            switch(true){
                case (month === 1 ||month === 3 ||month === 5 || month ===7|| month ===8||month ===10 || month ===12 ):
                    dateLength = 31;
                    break;
                case (month === 2 && year%4 ===0):
                    dateLength = 29;
                    break;
                case (month === 2 && year%4 !==0 ):
                    dateLength = 28;
                    break;
                default: 
                    dateLength = 30;
            }
            for (var day = 1 ; day <= dateLength; day ++){
                dayFunction(day)
                monthFunction(month)
                yearFunction(year)
                finalTotalFunction(finalDayTotal,finalMonthTotal,finalYearTotal)
                if (GrandTotal === find){
                 console.log(day,"/",month,"/",year)
                 }
            }
        }
    }
    var finalDayTotal =0;
    var finalMonthTotal =0;
    var finalYearTotal =0;
    var GrandTotal;

    var dayFunction = (day) =>{
        daySplitter=day.toString().split("");
        var split =daySplitter.map(Number)
        for (let n of split){
            finalDayTotal += n;
        }
    }
    var monthFunction = (month) =>{
        monthSplitter=month.toString().split("");
        var split =monthSplitter.map(Number)
        for (let n of split){
            finalMonthTotal += n;
        }
    }
    var yearFunction = (year) =>{
        yearSplitter=year.toString().split("");
        var split =yearSplitter.map(Number)
        for (let n of split){
            finalYearTotal += n;
        }
        
    }
    function finalTotalFunction(fd,fm,fy){
        GrandTotal = fd+fm+fy;
    }

4

2 回答 2

1

    var finalDayTotal =0;
    var finalMonthTotal =0;
    var finalYearTotal =0;
    var GrandTotal;
    
    var dayFunction = (day) =>{
    	finalDayTotal = 0
        daySplitter=day.toString().split("");
        var split =daySplitter.map(Number)
        for (let n of split){
            finalDayTotal += n;
        }
    }
    var monthFunction = (month) =>{
    	finalMonthTotal = 0
        monthSplitter=month.toString().split("");
        var split =monthSplitter.map(Number)
        for (let n of split){
            finalMonthTotal += n;
        }
    }
    var yearFunction = (year) =>{
    	finalYearTotal = 0
        yearSplitter=year.toString().split("");
        var split =yearSplitter.map(Number)
        for (let n of split){
            finalYearTotal += n;
        }
        
    }
    function finalTotalFunction(fd,fm,fy){
        GrandTotal = fd+fm+fy;
    }
    
    var find = 25;
    
    for (var year = 2010 ; year <= 2019 ; year++){
        for (var month = 1 ; month <=12 ; month++){
            var dateLength;
            switch(true){
                case (month === 1 ||month === 3 ||month === 5 || month ===7|| month ===8||month ===10 || month ===12 ):
                    dateLength = 31;
                    break;
                case (month === 2 && year%4 ===0):
                    dateLength = 29;
                    break;
                case (month === 2 && year%4 !==0 ):
                    dateLength = 28;
                    break;
                default: 
                    dateLength = 30;
            }
            for (var day = 1 ; day <= dateLength; day ++){
                dayFunction(day)
                monthFunction(month)
                yearFunction(year)
                finalTotalFunction(finalDayTotal,finalMonthTotal,finalYearTotal)
                if (GrandTotal === find){
                 console.log(day,"/",month,"/",year)
                 }

            }
        }
    }

于 2019-08-28T05:34:51.430 回答
0

dayFunctionmonthFunction并且yearFunction没有被吊起。但是,如果您使用function foo() { }语法,它们将起作用。但是,如果可以的话,您应该避免将现代 js 与过时的语法混合在一起。

您的代码也可以简化(如果我了解您要实现的目标):

const date = "01/08/1996";

const isDateSumMatching = (date, value) => {
  return date
    .split("")
    .filter((e) => /\d/.test(e))
    .reduce((sum, current) => sum + Number(current), 0)
    === value;
};

console.log(isDateSumMatching(date, 25));
console.log(isDateSumMatching(date, 34));

于 2019-08-28T06:09:53.200 回答