2013-01-15 62 views
2

我將一些點映射爲畫布上的點,並且我想要將點重複渲染爲較大的點。檢查座標是否在使用inArray()的jQuery數組中()

我需要檢查座標是否已經映射過,所以我想在我去的時候將座標存儲在一個數組中。

這是我的。我不確定.inArray行。如何檢查座標是否已經在數組中?

$(function() { 
    var arr = []; 
    arr.push([0,1]); 
    arr.push([2,1]); 
    arr.push([3,1]); 
    arr.push([4,1]); 
    arr.push([5,1]); 

    if(jQuery.inArray("2,1",arr)) { 
    alert("not there"); 
    } 

}); 

HERE'S A SIMPLIFIED FIDDLE.

+0

請問你的代碼工作或不工作?如果不起作用,您遇到的錯誤或問題是什麼? –

+0

這些座標有多準確(小數點多少)?在將它們推送到座標數組之前,您可能需要使用['toFixed'](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toFixed)將它們舍入。 – Blazemonger

+0

它不起作用。我很確定座標是浮點值。他們來自Twitter推特數據。如果座標「匹配」,如果它們是+/-幾個座標度,那麼這將是理想的。我發佈了一個小提琴。 – Jon

回答

2

據我所知,inArray只測試簡單的值(即不是數組或對象)。 您可以使用filter代替:Fiddle

var arr = []; 
    arr.push([0,1]); 
    arr.push([2,1]); 
    arr.push([3,1]); 
    arr.push([4,1]); 
    arr.push([5,1]); 

x=2; 
y=1; 
    var filtered = $(arr).filter(function(){ 
     thisX = this[0]; 
     thisY= this[1]; 
     return x==thisX && y==thisY; 
    }); 
    if(filtered.length > 0){ 
     alert("yes"); 
    } 
    else { 
     alert("no"); 
    } 

爲了測試範圍改變,像這樣的回報條件:

return (x>thisX-0.5 && x<thisX+0.5) && (y>thisY-0.5 && y<thisY+0.5); 
+0

這似乎最適合。我該如何改變這個來檢查這些值是否在+/- 2個座標的範圍內?所以如果存儲[1.5,2,0],那麼+/- 0.5 [1.1,1.8]會匹配嗎? – Jon

+1

你不應該在非jQuery對象中使用'.filter()' – Alexander

+1

有沒有其他選擇,Alex? – Jon