JavaScript splice()方法是否不删除数组中超过半小时的时间项?

JavaScript splice()方法是否不删除数组中超过半小时的时间项?,javascript,arrays,Javascript,Arrays,我有3个数组,其中包含的时间段是字符串。。。像这样: $scope.shiftMorning = ['09:00', '09:30', '10:00', '10:30', '11:00', '11:30']; $scope.shiftAfternoon = ['12:00', '12:30', '13:00', '13:30', '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00', '17:30']; $scope.shif

我有3个数组,其中包含的时间段是字符串。。。像这样:

$scope.shiftMorning = ['09:00', '09:30', '10:00', '10:30', '11:00', '11:30'];
$scope.shiftAfternoon = ['12:00', '12:30', '13:00', '13:30', '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00', '17:30'];
$scope.shiftEvening = ['18:00', '18:30', '19:00', '19:30', '20:00', '20:30', '21:00', '21:30', '22:00', '22:30', '23:00', '23:30'];
现在我有一系列函数来确定接下来30分钟的当前时间,然后将当前时间与数组中的值进行比较。如果当前时间在数组值之后,我们将删除数组值。。。像这样:

function dateCompare(time1, time2) {

  //console.log("time 1 = " + time1 + " time 2 = " +time2);
  var t1 = new Date();
  var parts = time1.split(":");
  t1.setHours(parts[0], parts[1], "00", 0);
  var t2 = new Date();
  parts = time2.split(":");
  t2.setHours(parts[0], parts[1], "00", 0);

  // returns 1 if greater, -1 if less and 0 if the same
  if (t1.getTime() > t2.getTime()) {
    return 1;
  } else if (t1.getTime() < t2.getTime()) {
    return -1;
  } else {
    return 0;
  }
}

function getNearestHalfHourTimeString() {
  var now = new Date();
  var hour = now.getHours();
  var minutes = now.getMinutes();
  if (minutes < 15) {
    minutes = "30";
  } else if (minutes < 45) {
    minutes = "00";
    hour = hour + 1;
  } else {
    minutes = "00";
    ++hour;
  }
  return(hour + ":" + minutes);
}

var currentTime = getNearestHalfHourTimeString();

function removeUnavailableTimes(timeArray) {

  for (var i = 0; i < timeArray.length; i++) {
    console.log(timeArray[i], currentTime, dateCompare(timeArray[i], currentTime));
    if (dateCompare(timeArray[i], currentTime) === -1) {
      // remove the offending item from the array
      timeArray.splice(i, 1);
    }
  }
  //console.log(timeArray);
  return timeArray;
}

removeUnavailableTimes($scope.shiftMorning);
removeUnavailableTimes($scope.shiftAfternoon);
removeUnavailableTimes($scope.shiftEvening);
函数日期比较(时间1,时间2){
//console.log(“time 1=“+time1+”time 2=“+time2”);
var t1=新日期();
var parts=time1.split(“:”);
t1.设定小时数(第[0]部分、第[1]部分、“00”、0);
var t2=新日期();
parts=time2.拆分(“:”);
t2.设定小时数(第[0]部分、第[1]部分、“00”、0);
//如果较大,则返回1;如果较小,则返回1;如果相同,则返回0
if(t1.getTime()>t2.getTime()){
返回1;
}else if(t1.getTime()

现在一切似乎都很好,但是过去的项目(我们的当前时间更大)具有半小时值('09:30')似乎没有从数组中删除(使用.splice()),但是我注意到我的比较是正确的。有人能看出我做错了什么吗?

在迭代时,您正在使用
.splice()
删除数组元素。例如,当您删除
timeArray[0]
时,数组的其余部分将移位,因此当您检查
timeArray[1]
时,实际上跳过了一个元素

您需要使用其他系统,如:

  • 在原始数组上迭代,并用要保留的元素填充另一个数组
  • 迭代原始数组并从副本中删除元素
  • 在原始数组上向后迭代

    • 代码就在那里。运行
      splice()
      run时,
      timeArray
      会更改,因为
      splice()
      pop变量和索引在该运行时会更改。请检查我的密码

      function removeUnavailableTimes(timeArray) {
        var i = 0;
        while( i < timeArray.length ){
          console.log(timeArray[i], currentTime, dateCompare(timeArray[i], currentTime));
          if (dateCompare(timeArray[i], currentTime) === -1) {
            // remove the offending item from the array
            timeArray.splice(i, 1);
          }else{
            i++;
          }
        }
        //console.log(timeArray);
        return timeArray;
      }
      
      函数removeUnavailableTimes(timeArray){
      var i=0;
      while(i
      这里的简单修复方法是向后迭代:
      for(var i=timeArray.length-1;i