首页 > 解决方案 > 过滤两个日期之间的日期数组

问题描述

我有一系列日期。我正在尝试删除不在两个日期之间的日期。但是我得到了一些甚至早于“开始”日期的日期。我究竟做错了什么?

$scope.filterUpcomingEvents = function() {

    $scope.arrayOfEventData = JSON.parse(JSON.stringify($scope.tempArray));

    console.log($scope.tempArray, "arrayofeve");
    for (let d = 0; d < $scope.arrayOfEventData.length; d++) {
        debugger;
        console.log(d);
        console.log(new Date($scope.tempArray[d].event_date), "from", $scope.upcomingEventFrom);
        console.log(new Date($scope.tempArray[d].event_date) < $scope.upcomingEventFrom);
        console.log(new Date($scope.tempArray[d].event_date), "to", $scope.upcomingEventTo);
        console.log(new Date($scope.tempArray[d].event_date) > $scope.upcomingEventTo);
        console.log("---");
        if (new Date($scope.arrayOfEventData[d].event_date) < $scope.upcomingEventFrom || new Date($scope.arrayOfEventData[d].event_date) > $scope.upcomingEventTo) {
            $scope.arrayOfEventData.splice(d, 1);
        }
    }
    console.log($scope.arrayOfEventData, "after splice");
}

在控制台中,虽然我得到了一些比较,但它并没有被拼接。当我看到 finaly 数组时,它仍然具有应该被拼接的值,尽管它是 true 并且进入if.

日期数组:

0: {
        event_id: "49",
        event_name: "julyevent",
        event_date: "2018-07-13",
        event_time: "11:00AM",
        event_type_id: "2",
        …
    }
1: {
        event_id: "50",
        event_name: "up event1",
        event_date: "2018-06-22",
        event_time: "11:11AM",
        event_type_id: "2",
        …
    }
2: {
        event_id: "52",
        event_name: "twe",
        event_date: "2018-06-29",
        event_time: "11:11AM",
        event_type_id: "2",
        …
    }
3: {
        event_id: "55",
        event_name: "eve4",
        event_date: "2018-06-23",
        event_time: "10:22PM",
        event_type_id: "2",
        …
    }
4: {
        event_id: "56",
        event_name: "eve5",
        event_date: "2018-06-25",
        event_time: "11:11AM",
        event_type_id: "2",
        …
    }
5: {
        event_id: "57",
        event_name: "eve6",
        event_date: "2018-06-28",
        event_time: "10:00AM",
        event_type_id: "2",
        …
    }
6: {
        event_id: "58",
        event_name: "eve7",
        event_date: "2018-06-28",
        event_time: "9:00AM",
        event_type_id: "2",
        …
    }
7: {
        event_id: "59",
        event_name: "eve8",
        event_date: "2018-07-12",
        event_time: "7:00AM",
        event_type_id: "2",
        …
    }
8: {
        event_id: "60",
        event_name: "eve9",
        event_date: "2018-06-19",
        event_time: "4:00AM",
        event_type_id: "2",
        …
    }
9: {
        event_id: "61",
        event_name: "eve10",
        event_date: "2018-06-20",
        event_time: "8:00PM",
        event_type_id: "2",
        …
    }
10: {
        event_id: "62",
        event_name: "eve11",
        event_date: "2018-06-23",
        event_time: "3:00AM",
        event_type_id: "2",
        …
    }
11: {
        event_id: "63",
        event_name: "eve12",
        event_date: "2018-06-21",
        event_time: "10:22PM",
        event_type_id: "2",
        …
    }
12: {
        event_id: "64",
        event_name: "eve13",
        event_date: "2018-06-24",
        event_time: "6:00AM",
        event_type_id: "2",
        …
    }

标签: javascriptangularjs

解决方案


当您从递增循环的同一个数组拼接时,数组会修改并且项目会移动。因此,您可能会错过一次迭代。

你可以做的一件事是使用while循环向后循环,这样你就不会循环你拼接的方向。

let i = $scope.arrayOfEventData.length;
while(i--){
  // your code
}

推荐阅读