2017-07-06 88 views
-2

分钟差我有一个排序后的数组:JS发现日期阵列

[new Date('2017-01-02'), new Date('2017-01-07'), new Date('2017-01-09'), new Date('2017-01-17')] 

现在我想找到的最小时间差的任何两个相邻元件之间的阵列中存在的。例如,在这种情况下:

new Date('2017-01-09').getTime() - new Date('2017-01-07').getTime() 

有地图或一些东西优雅的方式相似或者我有循环,记住smalles间隔到目前为止,如果出现一个较小的则更换价值?

目前的解决方案:

let timestamps = Gps.find().map(doc => doc.timestamp); 
        timestamps.sort(); 
        let minimumDifference; 
        let previousTimestamp; 
        timestamps.forEach(timestamp => { 
         if(!previousTimestamp) { 
          previousTimestamp = timestamp; 
         } 
         else{ 
          let difference = timestamp.getTime() - previousTimestamp.getTime(); 
          if(!minimumDifference || minimumDifference > difference){ 
           minimumDifference = difference; 
          } 
          previousTimestamp = timestamp; 
         } 

        }); 
+0

我不得不说,我是一个宁可在这样的情况下,一个简单的循环液的粉丝,很容易阅读和不言自明,而链接和嵌套的地图/过滤器/任何调用通常都是相当伏都教的。我不认为在需要访问其他数组元素的情况下映射工作得很好,而且不仅仅是当前的数组元素。也许这可以实现......但我怀疑它最终会看起来更“漂亮”。 – CBroe

+0

所以除非你有一个由于大量数据而导致性能成为问题的情况(其中“本地”功能遍历数组元素可能比显式循环快一点),我不会费心寻找别的东西,如果你得到的是为你工作。 (在这方面 - 如果阵列中有两个或更多相同最小长度的区间,那么预期的结果是什么?) – CBroe

回答

0

我想重新回到昔日。普通的旧javascript。没有创造unnecessory副本

var timestamps = [1,2,5,9]; 
timestamps.sort(); 
var result = timestamps[timestamps.length-1]; 
for(var i=1;i<timestamps.length;i++){ 
    result = (timestamps[i]-timestamps[i-1])<result?(timestamps[i]-timestamps[i-1]):result; 
} 

采取厂,并继续同样的方式