[英]Filter array of dates between two dates
我有一系列的日期。 我正在嘗試刪除不在兩個日期之間的日期。 但是我得到的某些日期甚至早於“開始”日期。 我究竟做錯了什么?
$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",
…
}
當您從循環遞增的同一數組進行拼接時,數組會被修改,並且項會移位。 因此,您可能會錯過迭代。
您可以做的一件事是使用while循環向后循環,這樣就不會在u拼接的方向上循環。
let i = $scope.arrayOfEventData.length;
while(i--){
// your code
}
您可以直接使用Array.filter
:
$scope.arrayOfEventData = $scope.arrayOfEventData.filter((a)=>(new Date(a.event_date) >= $scope.upcomingEventFrom || new Date(a.event_date) <= $scope.upcomingEventTo )));
問題的原因是,當您刪除某些元素時,您仍然可以通過使用d ++來增加d 。 如果要保留代碼,請從循環中刪除d ++ :
for (let d=0; d<...; ) // no d++
...
if ()
splice(d, 0);
else
d++;
但是,如果使用Array.filter,則可以避免此類問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.