2017-09-11 48 views
1

我對JavaScript很新穎,我需要通過start_value和end_value獲得排序數組的一部分(切片)(數字,時間戳基本上)。獲取從開始值到最終值的排序數組的一部分

例如,假設我有一組上個月的隨機時間戳,我想在兩週前和一週前獲取所有時間戳。 這是一個非常簡單的算法來編寫(使用二進制搜索),但我不想用這些計算搞亂我的代碼。 我一直在尋找一種方法來做到這一點的JavaScript,但沒有找到任何。

感謝您的未來幫助:)

+0

你有沒有嘗試過的東西呢? – Vinny

+0

如果它被排序了,你可以使用'indexOf()'來查找開始和結束索引,然後用這些索引調用'slice()'。您甚至可以在返回的開始索引之後1處進行結束索引搜索以加快速度。 – skyline3000

+0

@ skyline3000使用'indexOf'假定數組中的'start_value'和'end_value'完全匹配。對於給定的日期示例,可能沒有「一週前」確切時間的時間戳。 – skirtle

回答

1

也許使用filter

var dates = [123, 234, 456, 468, 568, 678]; 
 
var min = 300; 
 
var max = 500; 
 

 
var inRange = dates.filter(function(date) { 
 
    return min < date && date < max; 
 
}); 
 

 
console.log(inRange);

從有利的一面,這甚至不需要它們進行排序。不利的一面是,它可能不會像在相關的開始和結束點上執行得很好的二進制搜索一樣快。除非你有一些非常苛刻的性能要求,否則我認爲這不重要。

+0

謝謝你的迴應。該數組可能相當大,並且它是一個UI組件,因此通過O(log-n)執行O(n)並不是真正的選擇。 –

+0

我們說話有多大? – skirtle

+0

〜10M(元素),現場重新渲染.. –

0

好的,我找到了一個名爲binarysearch的純js庫,它正是我要找的:https://www.npmjs.com/package/binarysearch。它有rangeValue函數,它接受不存在的數字作爲開始結束。似乎工作:)