2

I'm mapping some points as dots onto a canvas, and I want dots which are repeats to be rendered as larger dots.

I need to check to see if the coordinate has already been mapped before, so I want to store the coordinates in an array as I go.

Here's what I have. I'm unsure about the .inArray line. How do I check to see if the coordinate is already in the array?

$(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.

4

2 に答える 2

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);
于 2013-01-15T21:15:44.760 に答える
0

フィドルをデバッグした後、問題は JavaScript が等しいかどうかをテストする方法に関係しているようです。同じ順序で同じ要素を持つ同じ長さの 2 つの配列は、まだ「厳密に等しい」とは見なされません ( ===)。

これを回避するには、equality をテストする独自の関数を開発する必要があります。

于 2013-01-15T21:11:00.023 に答える