根据日期数组检查日期

Cre*_*er7 7 javascript ecmascript-5 ecmascript-6

我正在尝试编写一个函数,该函数根据日期是否存在于数组中而返回TRUE或FALSE值.目前我有这个:

function isInArray(value, array) {
    var a = array.indexOf(value) > -1;

    if (a == false) {
        return false; //DATE DOES NOT EXIST
    }
    else {
        return true; //DATE EXISTS IN ARRAY
    }
}
Run Code Online (Sandbox Code Playgroud)

现在通常我会使用for循环,但是我使用while循环生成开始日期和结束日期之间的日期列表:

 while (day > 0) {
     var tDate = new Date(sDate.addDays(dayCounter));
     datesArray.push(tDate);
     day = day - 1; //DEDUCT THE DAYS AS ADDED

     var dateExists = isInArray(value, array);
     if (dateExists == false) {

     }
     else { 
         matchedDays++;
     }
     daysCounter++;
}
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用并且总是返回FALSE,我需要做什么才能使这个工作并返回正确的值?

样本数据: ARRAY[26/12/2016, 27/12/2016, 28/12/2016, 29/12/2016]

传入的价值 [27/12/2016]

  • 如果数组中存在该值,则返回TRUE
  • 如果数组中不存在该值,则返回FALSE

上面可能是个简单的错误!所以对此有任何帮助.也会有时间影响被检查的日期?

Chr*_*ris 5

您可以尝试使用该find()方法(如果支持ecmascript):

案例:数组包含字符串

var array = ["26/12/2016", "27/12/2016", "28/12/2016", "29/12/2016"];
var value1 = "26/12/2016";  //exists
var value2 = "26/12/2026";  //doesn't exist

function isInArray(array, value) {
  return (array.find(item => {return item == value}) || []).length > 0;
}

console.log(isInArray(array, value1));
console.log(isInArray(array, value2));
Run Code Online (Sandbox Code Playgroud)


案例:数组包含Date对象

var array = [new Date("December 26, 2016 00:00:00"), new Date("December 27, 2016 00:00:00"), new Date("December 28, 2016 00:00:00"), new Date("December 29, 2016 00:00:00")];
var value1 = new Date("December 26, 2016 00:00:00");  //exists
var value2 = new Date("December 16, 2026 00:00:00");  //doesn't exist


function isInArray(array, value) {
  return !!array.find(item => {return item.getTime() == value.getTime()});
}

console.log(isInArray(array, value1));
console.log(isInArray(array, value2));
Run Code Online (Sandbox Code Playgroud)