簡體   English   中英

JavaScript中的函數(部分函數)

[英]functions(partial functions) in javascript

編寫一個滿足以下規則的函數(不是生成器),稱為displayDayNumber(dateString)。


var dayNumber =displayDayNumber("Nov 5,2017");  //309
console.log(dayNumber ()); // 310
dayNumber("Oct 31 2017"));  //304
dayNumber();//305

到目前為止,我的代碼只工作一次dateString傳遞值,但是當我在dayNumber中傳遞新值時,它不是基於計算的。


var dayNumber =function(dateString=new Date().toDateString())
{
var currentString=dateString;
var no=dateString.substring(8,10);
// console.log(no);

    return function () {
       // console.log("dateString=",dateString);
        var b = calculateNumber(dateString)   //helper function to calculate day No
        {

            var no = dateString.substring(8, 10);
            var toNo = parseInt(no) + 1;
            var thenString = toNo.toString() + ' ';
            var replacecharacter = dateString.replace(no, thenString);
            dateString = replacecharacter;
            return b;
        };
        return dateString;
    };

}

let genDayNumber=dayNumber ("Sat Nov 05 2017"); //309  //working 
genDayNumber();     //working
genDayNumber("Wed Oct 31 2017")); //304   not working
genDayNumber();     //not working
const dayNumber = date => {
  let days = new Date(date).getDay();
  return arg => {
    if(arg){
       return days = new Date(arg).getDay();
    }
    return ++days;
  };
};

您要返回的函數不帶參數,因此當您傳遞"Wed Oct 31 2017" ,它將被忽略。

您需要修改返回的函數以接受值。

這是一個有效的例子

 var dayNumber =displayDayNumber("Nov 5,2017"); //309 console.log(dayNumber); // 309 console.log(dayNumber()); // 310 console.log(dayNumber("Oct 31 2017")); //304 console.log(dayNumber())//305 function displayDayNumber(str) { let date = new Date(str); let day = dayOfYear(date); var result = function(str) { if (str) { day = displayDayNumber(str); return day; } else { return ++day; } } result.valueOf = result.toString = function() { return day; } return result; } function dayOfYear(now) { // Taken from https://stackoverflow.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366 var start = new Date(now.getFullYear(), 0, 0); var diff = (now - start) + ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000); var oneDay = 1000 * 60 * 60 * 24; var day = Math.floor(diff / oneDay); return day; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM