检查值范围是否在数组中

时间:2014-02-25 16:17:41

标签: javascript jquery arrays search

什么:我有一个数组,其角度从0到360,输入预定义范围,定期更新输入范围从0到360.我想检查输入是否在数组的预定义范围。

示例

array:
array[0]=100, array[1]=40, array[2]=320, array[3]=60, etc....

我需要做的是查看输入是否允许说

input:
input=50;

在数组

中任何值的范围内
range:
range=25;

我需要做什么代码: 较低的范围=输入范围&上限=输入+范围 如果数组中存在较低范围和较高范围之间的值,则输出数组编号。

完成示例: input-range = 25&输入+范围= 75 所以,如果一个介于25和25之间的值75存在于数组

array[1]=40 & array[3]=60在此范围内。

输出数组键:

output[0]=1, output[1]=3

方法 创建一个新的嵌套数组,其中添加了范围并从每个数组组件中的值中减去。然后是一个for循环来检查输入是否在任何值范围内。

示例解决方案:

var nodeArray=new Array(); 
for(var i = 0; i<array.length;i++){
nodeArray[i].push(array[i]-range);
nodeArray[i].push(array[i]+range);
}

then the function to check:
for(var j=0;i<array.length;i++){

if ((input>nodeArray[j][0])&&(input<nodeArray[j][1])){
alert("within range");
}
}

问题我需要一个快速执行的解决方案,因为执行时间对我来说非常重要,我很好奇是否有人对如何解决这个问题有了很多改进。

注意:我还没有解决折叠问题(350度+ 20度= 10度)

1 个答案:

答案 0 :(得分:3)

我找到了三个优化

首先:不要在循环中使用函数length,因为每次调用该函数。声明一个新变量并将数组长度保存在其中:

for(var j=0, arrayLength = array.length; j < arrayLength ;j++){}

第二:如果您只需要知道某个值是否在该范围内,请在您的要求break中使用if退出'for'循环:

if ((input>nodeArray[j][0])&&(input<nodeArray[j][1])){
  alert("within range");
  break;
}

第三:您可以更改编写for循环的方式。

for(var i = -array.length; i++ ;){}

就像你删除一个变量声明和一个比较操作一样。