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

3

我有一个问题需要解决。我的问题是我有一个值数组,这些值表示一段时间的长度,我需要删除与特定时间重叠的所有值:

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小时制钟表,所以1 - 1.5表示上午1:00到1:30。

您对构造此内容的最佳方法有何想法吗?


1
你需要循环遍历所有项目,然后将字符串解析为可操作的数字,并使用一些逻辑进行检查,以返回 true 或 false。我建议使用 filter 循环数组来实现 - https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/filter - vsync
移除时间后,显示预期结果应该是什么? - adeneo
3个回答

2
我希望采用面向对象的方式来实现:

(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

由于您可以控制数据结构,因此我认为将其构造为长度为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 

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接