2017-07-06 87 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; 
} 

採取廠,並繼續同樣的方式