繁体   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