gpt4 book ai didi

JavaScript splice() 方法不删除数组中的时间项是半点吗?

转载 作者:行者123 更新时间:2023-11-30 17:26:51 26 4
gpt4 key购买 nike

我有 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);

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

最佳答案

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

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

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

关于JavaScript splice() 方法不删除数组中的时间项是半点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24079968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com