[英]How to remove element from an array of objects?
我将jQuery 1.9.1和jQuery Mobile 1.3.1用于小型移动应用程序。 在某一时刻,我有一个对象数组,其中包含三个元素,一个字符串和两个日期对象。 我要为其添加日期,并且我想检查开始日期,如果开始日期已经在数组中,则希望将其删除。
var myArray = [];
function removeByValue(arr, val) {
for (var i = 0; i < arr.length; i++) {
if (arr[i].begin == val) {
arr.splice(i, 1);
break;
}
}
}
$("#cal").bind('change', function (event, date) {
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
removeByValue(myArray, new Date(year, month, day));
myArray.push({
"summary": "",
"begin": new Date(year, month, day),
"end": new Date(year, month, day)
});
});
关键是这似乎不起作用。 它会不断将日期添加到我的数组中,如果我的数组中已经添加了日期,它仍会添加它。 简而言之,我的removeByValue函数现在可以正常工作了。 知道如何解决吗? 因此,我基本上想检查所选日期是否在数组中,如果是,则不再将其添加到数组中,如果不是,则将其添加到数组中。
相互冲突的两个相关代码段是:
removeByValue(myArray, new Date(year, month, day));
if (arr[i].begin == val) {
您正在创建一个全新的对象,然后检查它是否与已存在的对象相同。 不可以 这是全新的。
如果您可以相信arr[i].begin
是一个日期,那么可以使用日期比较:
if (arr[i].begin.getTime() === val.getTime()) {
这将同时使用两个日期,并将它们转换为以1970年以来的毫秒数表示的整数,然后确保这些整数匹配。
如果您尝试查找和删除值:
function removeByValue(arr, val) {
for (var i = 0; i < arr.length; i++) {
if(arr[i] == val) {
arr.splice(i, 1);
break;
}
}
}
如果您只关心第一个值:
function removeByValue(arr, val) {
if(arr[0] == val) {
arr.splice(0, 1);
break;
}
}
您可以通过内部时间戳比较日期:
if (arr[i].begin.getTime() == val.getTime()) {
arr.splice(i, 1);
break;
}
您正在比较两个日期类型的值。 因此,您必须使用getTime()方法将值转换为Date。
function removeByValue(arr, val)
{
var oldDate=val.getTime();
var l=arr.length;
for (var i = 0; i <l ; i++) {
if(arr[i].begin.getTime() === oldDate) {
arr.splice(i, 1);
break;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.