看到其他问题,也试过过滤功能,但不确定自己是否使用正确。
基本上我有一个看起来像这样的对象数组:
[{"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/