javascript - 如何测试对象是否存在于 Javascript 数组中?

标签 javascript jquery json

看到其他问题,也试过过滤功能,但不确定自己是否使用正确。

基本上我有一个看起来像这样的对象数组:

[{"hour":"6 am", "date":"2012-12-01"},{"hour":"7 am", "date":"2012-12-01"}]

我在设定的几天内循环,每天早上 6 点到晚上 9 点之间循环。如果小时(如该特定日期的小时)存在于上述数组中。我想在一个新对象中将其标记为可用,然后将其传递给一个新数组。以下是我目前正在使用的代码。

for(var i = 0; i < dayCount; i++){//Loop through the days that exist in the schedule
    day = new Object();
    day.date = Date.parse(startDate).add(i).days();
    day.dayName = weekday[day.date.getDay()]
    day.hours = new Array();
    for(var j = 6; j < 22; j++){ //Loop through hours of the day seeing if they're available/scheduled, etc.
        if(j<=12){
            thisHour = j +' am';
        } else{
            thisHour = j-12 + ' pm';        
        }
        var thisIsAvailable = $(assignedHours).filter(function(){
                return assignedHours.hour == thisHour && assignedHours.date == day.date.toString("yyyy-MM-dd");
            });
        var thisIsScheduled = 0;
        day.hours.push({hour: thisHour,available: thisIsAvailable, scheduled: thisIsScheduled});
    }
daysInSchedule.push(day);
}   

一些注意事项。我在 day.date 属性上使用 .toString() ,因为它以 JS 日期格式格式化,而我要比较的值是 MYSQL 日期格式。我已经提醒(谈论旧式调试)thisIsAvailable.length,每次我都得到 0。任何想法表示赞赏。谢谢!

编辑:刚刚意识到我忘了告诉大家一些非常重要的事情。我给你的数组包含在名为 assignedHours 的变量中。抱歉把它漏掉了。

编辑 2:澄清一下,我的问题在两个代码摘录之间。我正在尝试查看给定数组中的对象之一是否与循环中的日期和时间匹配,以及我正在运行的嵌套循环。如果是这样,我想将其传递给一个新对象,然后将其插入当天的小时数组。如果不是,那么我仍然传递该对象,但使用 0 值表示它可用。

最佳答案

我怀疑您的问题在于您使用 jQuery 的 filter 方法的方式:

var thisIsAvailable = $(assignedHours).filter(function(){
    return assignedHours.hour == thisHour && assignedHours.date == day.date.toString("yyyy-MM-dd");
});

如果我没记错的话,assignedHours.hour 将始终是未定义的,因为它总是引用您的 assignedHours 数组(您希望它在其中引用当前元素您正在过滤,即 inside assignedHours 中的一个元素。

你可能想做这样的事情:

var thisIsAvailable = $(assignedHours).filter(function(array_key){
    return this.hour == thisHour && this.date == day.date.toString("yyyy-MM-dd");
});

Edit1:正如@Kevin B 所指出的,$.grep 更适合过滤数组,因为它不会在您的数组周围创建 DOM 包装器:

$.grep(assignedHours, function(el) {
    return el.hour == thisHour && el.date == day.date.toString("yyyy-MM-dd");
});

关于javascript - 如何测试对象是否存在于 Javascript 数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13179038/

相关文章:

javascript - Babel 没有替换箭头函数

javascript - 从单独的应用程序访问 Sharepoint Project Web 应用程序 REST

javascript - 从 Node 中的请求中提取 JSON 数据

php - 添加 Symfony 应用程序时出现 JSON_ERROR

javascript - Highcharts + Angularjs : Graph doesn't redraw when adding series from an external event

javascript - 使用 d3.chart.js 在 d3.js 中绘制折线图

javascript - 具有多个颜色选择器的 KnockoutJS 自定义绑定(bind)

javascript - 有没有办法让图像显示在:none not get downloaded by the browser?内

javascript - 无法禁用文本区域中的逗号

json - 安装该软件包时,我的nuget软件包中的content文件夹未将文件添加到根目录中