簡體   English   中英

根據給定的數字范圍在對象數組中搜索的最佳方法

[英]Best way to searching in an array of objects, based on given range in numbers

例如,我們有一個像

var arr = [{'startTime': 0, 'endTime': 2}, 
           {'startTime': 1, 'endTime': 3},
           {'startTime': 4, 'endTime': 9},
           {'startTime': 5, 'endTime': 9},
           {'startTime': 7, 'endTime': 13},
           {'startTime': 20, 'endTime': 25},
           {'startTime': 27, 'endTime': 32},
           {'startTime': 30, 'endTime': 35},
          ]

這個數組可以是任意長度,現在如果需要8作為當前時間的結果,那么我們需要搜索范圍內 8 依賴的所有項目。 所以結果將是

           [{'startTime': 4, 'endTime': 9},
           {'startTime': 5, 'endTime': 9},
           {'startTime': 7, 'endTime': 13},]

在數組的最小迭代中搜索這個的最佳方法是什么?

試試這樣。

 var arr = [{'startTime': 0, 'endTime': 2}, {'startTime': 1, 'endTime': 3}, {'startTime': 4, 'endTime': 9}, {'startTime': 5, 'endTime': 9}, {'startTime': 7, 'endTime': 13}, {'startTime': 20, 'endTime': 25}, {'startTime': 27, 'endTime': 32}, {'startTime': 30, 'endTime': 35}, ]; console.log(arr.filter((item, index) => (item.startTime <= 8 && item.endTime >= 8)));

您可以使用以下謂詞使用Array#filter()來實現此目的:

item => item.startTime <= value && value <= item.endTime

其中itemarr被過濾的項目, value是在item的范圍內測試包含的值。

這可以用代碼表示為:

 var arr = [{'startTime': 0, 'endTime': 2}, {'startTime': 1, 'endTime': 3}, {'startTime': 4, 'endTime': 9}, {'startTime': 5, 'endTime': 9}, {'startTime': 7, 'endTime': 13}, {'startTime': 20, 'endTime': 25}, {'startTime': 27, 'endTime': 32}, {'startTime': 30, 'endTime': 35}, ]; /* Filters items of arr that have a range containing the specified value */ const getItemsContaining = (value) => arr.filter(item => item.startTime <= value && value <= item.endTime) console.log(getItemsContaining(8))

您可以使用filter過濾數組:

 var arr = [{'startTime': 0, 'endTime': 2}, {'startTime': 1, 'endTime': 3}, {'startTime': 4, 'endTime': 9}, {'startTime': 5, 'endTime': 9}, {'startTime': 7, 'endTime': 13}, {'startTime': 20, 'endTime': 25}, {'startTime': 27, 'endTime': 32}, {'startTime': 30, 'endTime': 35}, ] console.log(arr.filter(el => el.startTime < 8 && el.endTime > 8))

這是javascript中二叉搜索樹的實現。 您可以檢查它https://www.geeksforgeeks.org/implementation-binary-search-tree-javascript/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM