簡體   English   中英

如何從對象數組中刪除元素?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM