Javascript 搜索包含包含所需值的范围的数组

Javascript 搜索包含包含所需值的范围的数组,javascript,arrays,range,Javascript,Arrays,Range,如何找到第一个值和第二个值之间的数组(或一个数组)? 我的意思是下一步: arrays = [[0,453],[454,820],[821,1350]]; values = [320,519] 在这种情况下,我们返回: [0,1] //320 =< [0,453] < 519 =< [454,820] [0,1]//320=

如何找到第一个值和第二个值之间的数组(或一个数组)? 我的意思是下一步:

arrays = [[0,453],[454,820],[821,1350]];
values = [320,519]
在这种情况下,我们返回:

[0,1] //320 =< [0,453] < 519 =< [454,820]
[0,1]//320=<[0453]<519=<[454820]
对于值[30450]:

[0,0] //30 =< [0,453] >= 450
[0,0]//30=<[0453]>=450
或[201200]:

[0,2] //20 =< [0,453] < 1200 > [454,820] < 1200 >= [821,1350]
[0,2]//20=<[0453]<1200>[454820]<1200>=[8211350]
我尝试编写简单快速的算法,但遇到困难(缺乏知识)……并按原样编写

//伪代码
数组=[[010074],[10751393],[13941418]]
值=[500700]
对于(i=0;ivalues[1]){
第二个=i;
}
返回[第一,第二]
}
}
有解决这个问题的最佳方法吗?重写和完成上面的伪代码值得吗


@对不起,我不能选择最好的答案

回答四个问题-非常快速的解决方案,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]
var数组=[[0453]、[454820]、[8211350];
var值=[320519];
var result=values.map(函数(值){
for(var i=0;i值)返回null;
如果(数组[i][1]>=value)返回i;
}
返回null;
});
console.log(结果);//[0,1]

如果值不在任何范围内,则返回null。请随意编辑代码并返回您希望用于该情况的任何值。

如果该值不在任何范围内,您应该返回什么?(-1?Null?)这看起来不对
数组[i 1][1]>值[1]
我认为我的解决方案一点也不慢。显然还有改进的余地(比如使用范围内的二进制搜索),但这会大大增加复杂性。我做了一个jsPerf来测试所有(正在工作的)解决方案的速度,很可疑我的似乎是最快的。如果发现错误,请编辑它。
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);
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);