我遇到了解决这个问题的问题。我的想法是,我有一系列值,我正在考虑时间,我需要删除所有与特定时间重叠的值:
var availableTimes = ['0 - 0.5', '0.5 - 1', '1 - 1.5', '1.5 -2', '2 - 2.5', '2.5 -3']
var timeToRemove = '0.5 - 2'
我可以完全控制数组的外观,但这就是主意。我无法弄清楚如何构建我的可用时间数组和我的timeToRemove
以便我可以完成此任务。我使用的是24:00小时,因此1 - 1.5
是凌晨1:00到凌晨1:30。
有关构建此问题的最佳方法的任何想法吗?
答案 0 :(得分:2)
我更喜欢OO方式来做到这一点:
(1)构造一个具有以下结构的对象的数组:
{
StartTime:[fload],
EndTime:[fload]
}
所以你的时间数组看起来像这样
var availableTimes=
[
{StartTime:0,EndTime:0.5},
{...}
];
(2)要删除的时间具有相同的结构:
var timeToRemove = '0.5 - 2';
=>
var timeToRemove={StartTime:0.5,EndTime:2};
(3)删除算法如下所示:
for (var i=0;i<availableTimes.length;i++)
{
if(availableTimes[i].StartTime > timeToRemove.StartTime
&& availableTimes[i].EndTime < timeToRemove.EndTime)
availableTimes[i]=null; //perform deletion
}
答案 1 :(得分:1)
由于您可以控制数据结构,我认为您最好将其构造为长度为2而不是字符串的数组(尽管您可以使用split(" - ")
将所有内容转换为此形式)
var availableTimes = [[0,0.5], [0.5,1], [1,1.5], [1.5 -2], [2,2.5], [2.5 -3]]
var timeToRemove = [0.5,2]
for (var i = 0; i<availableTimes.length;i++){
//use >= and <= if you want a closed interval
if ((availableTimes[i][0] > timeToRemove[0] &&
availableTimes[i][0] < timeToRemove[1]) ||
(availableTimes[i][1] > timeToRemove[0] &&
availableTimes[i][1] < timeToRemove[1]))
{
console.log("overlapping time: " + availableTimes[i]);
}
}
产生
overlapping time: 0.5,1
overlapping time: 1,1.5
答案 2 :(得分:1)
var availableTimes = ['0 - 0.5', '0.5 - 1', '1 - 1.5', '1.5 -2', '2 - 2.5', '2.5 -3']
var timeToRemove = '0.5 - 2';
var tempar = timeToRemove.replace(/\s/g,"").split('-');
for(var i = 0, t = availableTimes.length; i < t; i++){
var itemar = availableTimes[i].replace(/\s/g,"").split('-');
if(tempar[0] === itemar[0] && tempar[1] === itemar[1]){
availableTimes .splice(i, 1);
return;
}
}