Javascript - 从数组中删除值 - 构造一个时间数组

时间:2014-06-05 17:06:31

标签: javascript arrays

我遇到了解决这个问题的问题。我的想法是,我有一系列值,我正在考虑时间,我需要删除所有与特定时间重叠的值:

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。

有关构建此问题的最佳方法的任何想法吗?

3 个答案:

答案 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;
      }
   }