根据日期数组检查日期
check date against an array of dates
我正在尝试编写一个函数,该函数 return 根据数组中是否存在日期来确定 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
}
}
现在通常我会使用 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++;
}
但是这不起作用并且总是 return 是假的,我需要做什么才能使它起作用并 return 正确的值?
示例数据:ARRAY[26/12/2016, 27/12/2016, 28/12/2016, 29/12/2016]
传入的值[27/12/2016]
- return 如果值存在于数组中则为 TRUE
- return 如果数组中不存在该值则为 FALSE
可能是上面一个简单的错误!所以谢谢你的帮助。时间也会影响检查的日期吗?
你可以使用包含函数。
ri = ["26/12/2016", "27/12/2016", "28/12/2016", "29/12/2016"];
ri.includes("20/12/2016"); //False
ri.includes("26/12/2016"); //True
IE的替代品
indexOf return 值的位置。
var pos = ri.indexOf("26/12/2016"); // 0
var pos = ri.indexOf("20/12/2016"); // -1
var pos = ri.indexOf("27/12/2016"); // 1
if(pos > -1){ //is in array }
您可以尝试使用 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));
案例:数组包含日期对象
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));
类似
function isInArray(value, array) {
for (var i = 0; i < array.length; i++) {
if (value == array[i]) {
return true;
}
}
return false;
}
应该可以..
不过,您可能必须使用不同的比较操作。
我通过只获取日期的前 15 个字符解决了这个问题,这是我的代码片段:
//get the first 15 characters of each date in my array (hdates)
for (i=0;i<hdates.length;i++){
hdates[i]=hdates[i].toString().substring(0,15); //converts dates to 15 characters long strings
}
function highlight(date) {
if(hdates.indexOf(date.toString().substring(0,15))>-1) { //converts my date element to compare, too
return'ok';
} else {
return 'ko';
}
}
如果你不想改变你的数组,我建议你克隆它,然后将日期转换为 15 个字符长的字符串
我正在尝试编写一个函数,该函数 return 根据数组中是否存在日期来确定 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
}
}
现在通常我会使用 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++;
}
但是这不起作用并且总是 return 是假的,我需要做什么才能使它起作用并 return 正确的值?
示例数据:ARRAY[26/12/2016, 27/12/2016, 28/12/2016, 29/12/2016]
传入的值[27/12/2016]
- return 如果值存在于数组中则为 TRUE
- return 如果数组中不存在该值则为 FALSE
可能是上面一个简单的错误!所以谢谢你的帮助。时间也会影响检查的日期吗?
你可以使用包含函数。
ri = ["26/12/2016", "27/12/2016", "28/12/2016", "29/12/2016"];
ri.includes("20/12/2016"); //False
ri.includes("26/12/2016"); //True
IE的替代品 indexOf return 值的位置。
var pos = ri.indexOf("26/12/2016"); // 0
var pos = ri.indexOf("20/12/2016"); // -1
var pos = ri.indexOf("27/12/2016"); // 1
if(pos > -1){ //is in array }
您可以尝试使用 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));
案例:数组包含日期对象
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));
类似
function isInArray(value, array) {
for (var i = 0; i < array.length; i++) {
if (value == array[i]) {
return true;
}
}
return false;
}
应该可以.. 不过,您可能必须使用不同的比较操作。
我通过只获取日期的前 15 个字符解决了这个问题,这是我的代码片段:
//get the first 15 characters of each date in my array (hdates)
for (i=0;i<hdates.length;i++){
hdates[i]=hdates[i].toString().substring(0,15); //converts dates to 15 characters long strings
}
function highlight(date) {
if(hdates.indexOf(date.toString().substring(0,15))>-1) { //converts my date element to compare, too
return'ok';
} else {
return 'ko';
}
}
如果你不想改变你的数组,我建议你克隆它,然后将日期转换为 15 个字符长的字符串