2

我将一些点作为点映射到画布上,并且我希望将重复的点呈现为更大的点。

我需要检查之前是否已经映射过坐标,所以我想将坐标存储在一个数组中。

这就是我所拥有的。我不确定 .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");
  }

});

这是一个简化的小提琴。

4

2 回答 2

2

据我所知,inArray只测试简单值(即不是数组或对象)。您可以filter改用:小提琴

 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 如何测试相等性有关——两个长度相同、元素相同且顺序相同的数组仍然不被认为是“严格相等”(===)。

要解决这个问题,您必须开发自己的函数来测试相等性

于 2013-01-15T21:11:00.023 回答