2014-02-25 46 views
1

什麼是:我有一個數組,其角度從0到360,輸入一個預定義的範圍,並定期更新輸入範圍從0到360.我想檢查輸入在數組的預定範圍內。檢查數值範圍是否在陣列中

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

我需要做的就是看如果輸入可以說

input: 
input=50; 

是陣列中的一個範圍內的任何值內

range: 
range=25; 

我需要的代碼是: 下範圍=輸入範圍&上範圍=輸入+範圍 如果數組中存在較低範圍和較高範圍之間的值,則輸出數組編號。

完成例如:輸入範圍= 25 & +輸入範圍= 75 因此,如果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"); 
} 
} 

問題:我需要一個快速執行的解決方案,執行時間是我,我只是好奇,如果有人對如何解決這一顯着改善的想法很重要問題。

注:我還沒有解決以上問題(350deg + 20度= 10度)

+0

因此,這段代碼的工作原理是,那是你在說什麼? – Andy

+0

爲什麼不在開始時對數組進行排序呢?然後,您可以使用二進制搜索輕鬆檢查。 –

+0

@安迪 - 它不是完全的功能,但close.I還沒有解決翻車問題。如果有人有更好的方法,我很感興趣。更好的意思是更快的執行。這對我來說似乎是一個臃腫的解決方案。 –

回答

3

我發現褶皺2級的優化

首先:不要使用該函數length在你的循環中,因爲每次都調用該函數。聲明一個新的變量和保存裏面的數組長度:

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

:如果你只需要知道,如果一個值的範圍內,使用break在您的要求if退出「的」循環:

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

愛第一個......第二個不會工作......我需要知道範圍內的每個值。 –