Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象数组上循环_Javascript_Asp.net_Json_Jquery Ui - Fatal编程技术网

Javascript 在对象数组上循环

Javascript 在对象数组上循环,javascript,asp.net,json,jquery-ui,Javascript,Asp.net,Json,Jquery Ui,我正在开发一个asp.net应用程序,它利用了很多jQueryUI控件,特别是datepicker 在我的web服务中,我调用数据库并检索对象列表,然后将它们传递回javascript,在javascript中将它们解析为一个数组,其中包含一个或多个如下所示的对象: 我需要包含某种逻辑,在其中我可以循环遍历这个对象数组,并检查javascript日期是否介于对象的EndDate和StartDate属性之间,以便为日期选择器应用css样式。第一个问题,有没有办法将EndDate/StartDa

我正在开发一个asp.net应用程序,它利用了很多jQueryUI控件,特别是datepicker

在我的web服务中,我调用数据库并检索对象列表,然后将它们传递回javascript,在javascript中将它们解析为一个数组,其中包含一个或多个如下所示的对象:

我需要包含某种逻辑,在其中我可以循环遍历这个对象数组,并检查javascript日期是否介于对象的EndDate和StartDate属性之间,以便为日期选择器应用css样式。第一个问题,有没有办法将EndDate/StartDate属性从这种格式转换为有效的javascript日期? 如果是这样,我如何迭代数组并应用逻辑来查看日期是否在范围内

非常感谢您的帮助

编辑:我注意到这里的图像有点难以看到,您可以更清楚地阅读这里的属性:

根据要求,以下是一些示例代码:

function createDateRangesForCalendar() {
    $.ajax({
        type: "POST",
        url: "../Services/BookingService.asmx/GetCalendarDateRanges",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (response) {
            dateRanges = $.parseJSON(response.d);
        },
        error: function (xhr, textStatus, thrownError) {
            alert(textStatus);
            alert(thrownError);
        }
    });
}

function markInvalidDates(date) {

    var isHoliday = false;
    dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();

    isHoliday = checkIsHoliday(date);

    if ($.inArray(dmy, invalidDays) == -1) {

        for (var i = 0; i < dateRanges.length; i++) {
            // if date falls in between start and end date of object[i] return something like: return [true, "holiday", "Holiday Rates Apply - Minimum 14 days"];
            // else loop through to the next object and try there
            } 

        if (isHoliday == true) {
            return [true, "holiday", "Holiday Rates Apply - Minimum 14 days"];
        } else {
            return [true, ""];
        }
    } else {
        return [false, "unavailable", "Unavailable"];
    }
}
函数createDateRangesForCalendar(){
$.ajax({
类型:“POST”,
url:“../Services/BookingService.asmx/GetCalendarDateRanges”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
async:false,
成功:功能(响应){
dateRanges=$.parseJSON(response.d);
},
错误:函数(xhr、textStatus、thrownError){
警报(文本状态);
警报(thrownError);
}
});
}
函数markInvalidDates(日期){
var isHoliday=假;
dmy=date.getDate()+“-”+(date.getMonth()+1)+“-”+date.getFullYear();
isHoliday=checkIsHoliday(日期);
如果($.INARAY(dmy,无效天数)=-1){
对于(var i=0;i
StartDate和EndDate对我来说似乎是有效的JSON,除了结尾和开头的斜杠。否则,一个简单的值求值应该生成一个JS Date对象,您可以对其进行操作


关于你的第二点,是什么阻止你在阵列上进行经典循环?有些代码更有用,可以说得更多。

StartDate和EndDate对我来说似乎是有效的JSON,除了结尾和开头的斜杠。否则,一个简单的值求值应该生成一个JS Date对象,您可以对其进行操作


关于你的第二点,是什么阻止你在阵列上进行经典循环?有些代码更有用,可以说更多。

第一个问题,有没有办法将EndDate/StartDate属性从这种格式转换为有效的javascript日期?

var re = /Date\((\d+)/;
for(var i in arr) {
    var start = new Date(arr[i].startDate.match(re)[1]),
        end = new Date(arr[i].endDate.match(re)[1]);
    if(myDate < end && myDate > start)
        // do something.
}
格式如下:
/Date(毫秒)/
。可以像这样获得有效的JS日期对象:
新日期(s.match(/date\(\d+/)[1])

如果是,我如何迭代数组并应用逻辑来查看日期是否在范围内?

var re = /Date\((\d+)/;
for(var i in arr) {
    var start = new Date(arr[i].startDate.match(re)[1]),
        end = new Date(arr[i].endDate.match(re)[1]);
    if(myDate < end && myDate > start)
        // do something.
}
var re=/Date\(\d+)/;
用于(arr中的var i){
var start=新日期(arr[i].startDate.match(re)[1]),
end=新日期(arr[i].endDate.match(re)[1]);
如果(myDatestart)
//做点什么。
}

根据我的理解,上面的内容似乎回答了您的问题。

第一个问题,有没有办法将EndDate/StartDate属性从该格式转换为有效的javascript日期?

var re = /Date\((\d+)/;
for(var i in arr) {
    var start = new Date(arr[i].startDate.match(re)[1]),
        end = new Date(arr[i].endDate.match(re)[1]);
    if(myDate < end && myDate > start)
        // do something.
}
格式如下:
/Date(毫秒)/
。可以像这样获得有效的JS日期对象:
新日期(s.match(/Date\(\d+/)[1])

如果是,我如何迭代数组并应用逻辑来查看日期是否在范围内?

var re = /Date\((\d+)/;
for(var i in arr) {
    var start = new Date(arr[i].startDate.match(re)[1]),
        end = new Date(arr[i].endDate.match(re)[1]);
    if(myDate < end && myDate > start)
        // do something.
}
var re=/Date\(\d+)/;
用于(arr中的var i){
var start=新日期(arr[i].startDate.match(re)[1]),
end=新日期(arr[i].endDate.match(re)[1]);
如果(myDatestart)
//做点什么。
}

按照我的理解,上面的内容似乎回答了您的问题。

只需将开始日期和结束日期作为数字返回,不带\Date()\wrappers

在循环中,根据目标日期创建一个JavaScript日期,即
新日期(1334548800000)
,然后在目标日期和这些开始和结束日期之间进行简单比较


虽然您可以循环使用
$。每个(您的数组、函数(id、项){date comparison logic here});
我建议您在下划线库中查找一组合适的实用程序来操作JS对象。

只需将开始日期和结束日期作为数字返回,而不使用\date()\wrappers

在循环中,根据目标日期创建一个JavaScript日期,即
新日期(1334548800000)
,然后在目标日期和这些开始和结束日期之间进行简单比较


而您可以使用
$.each循环(您的数组、函数(id、项){date comparison logic here})
我建议您查看下划线库,寻找一组合适的实用程序来操作JS对象。

如果放大一些图像会更好。因此,您有一个开始日期和结束日期,您将它们与什么进行比较?我提供了一个指向图像可读版本的链接。您希望看到什么代码?我可以向您展示ajax从我的Web服务接收json字符串的调用,但除了将其解析为一个类似于图像中的对象数组之外,我还没有对其进行任何处理。我还有另一个日期。我想看看该日期是否介于图像中任何对象的开始日期和结束日期之间