搜索包含包含所需值的范围的数组
Search arrays containing ranges which include the required value
如何找到第一个值和第二个值之间的数组(或一个数组)?我的意思是下一个:
arrays = [[0,453],[454,820],[821,1350]];
values = [320,519]
在这种情况下,我们返回:
[0,1] //320 =< [0,453] < 519 =< [454,820]
对于[30450]值:
[0,0] //30 =< [0,453] >= 450
或[2012000]:
[0,2] //20 =< [0,453] < 1200 > [454,820] < 1200 >= [821,1350]
我尝试写一个简单快速的算法,但遇到困难(缺乏知识)…并"按原样"写…:
//pseudocode
arrays = [[0,10074],[1075,1393],[1394,1418]]
values = [500,700]
for (i=0;i<arrays.length;i ){
if(arrays[i][0]<values[0]){
first = i;
if(arrays[i][1]>values[1]){
second = i;
} else if (arrays[i 1][1]>values[1]){
second = i;
}
return [first, second]
}
}
这个问题有最好的解决方法吗?重写和完成上面的伪代码值得吗?
@我很抱歉,我无法选择最好的答案。
回答四个问题——非常快速的解决方案,Tibos——非常干净的代码。
不同的目标-不同的最佳答案。
我非常喜欢数组上的函数方法。以下是我如何编写代码:
var arrays = [[0,453],[454,820],[821,1350]];
var values = [320,519];
var result = values.map(function(value){
for (var i = 0; i<arrays.length; i++) {
if (arrays[i][0] > value) return null;
if (arrays[i][1] >= value) return i;
}
return null;
});
console.log(result); // [0,1]
如果值不在任何范围内,则返回null。请随意编辑代码并返回您希望的任何值。
var arrays = [[0,453],[454,820],[821,1350]];
var values = [320,519];
// values = [30,450];
// values = [20,1200];
var start = -1, end = -1;
arrays.some(function(data, idx) {
if (data[0] > values[1] || data[1] > values[1]) {
end = idx;
if (start === -1) start = 0;
return true;
} else if (start === -1 && (data[0] > values[0] || data[1] > values[0])) {
start = idx;
}
return false;
});
console.log(start, end);
相关文章:
- 如何通过数组更新角度子范围
- 在对象数组中查找多个值的d3范围
- 从指定范围创建字符数组
- 如何创建一个方法来验证数组的范围
- JS:从数组中查找特定范围内的最低/最高数字
- 根据范围过滤角度.js数组
- 将数组传递给函数或确保它在范围内
- Angularjs:访问范围变量数组并计算平均值
- 搜索包含包含所需值的范围的数组
- 如何检查符号是否在范围(或数组)中
- 返回Javascript中给定正则表达式的文本范围数组
- 检查鼠标光标是否在带坐标的数组范围内
- 对在10的倍数的相同范围内的数组值进行分组
- 短范围命名空间数组是什么意思
- AngularJs 帮助,在传递给隔离范围的对象中选择数组时遇到问题
- 如何获取数组第一个元素的范围
- 数组循环以确定范围平均值
- 查找范围数组中的重叠部分,并使用新的分块范围构建一个新数组
- 从范围数组中查找缺失的范围
- 如何获得价格范围数组在jquery数组根据比较我的金额