我在JS中有一个数组,需要通过对它进行检查来查找数据,但我想知道我是怎么做的= /
我的数组结构如下:
//global array spritea
var listObj = {
id: uid,
data: [
abposx,
abposy,
(abposx+imgwidth),
(abposy-imgheight)
]
};
spritea.push(listObj);
这是一个循环,所以数组的一个例子是:
spritea = [
{
id: "135",
data: [9,129,345, 687]
},
{
id: "239",
data: [596,382,0,687,33467]
}
];
所以我试图做的是:
查找
id where x is > data[0] && y > data[1] && x < data[2] && y < data[3]
然后它返回id?
任何人都知道如何做到这一点?它让我很困惑= /
答案 0 :(得分:2)
对于大型数组来说效率低,因为它是O(n)(简单的线性搜索),但应该这样做:
spritea = [
{
id: "135",
data: [9,129,345, 687]
},
{
id: "239",
data: [596,382,0,687,33467]
}
];
function searchSprites(sprites, x, y) {
var matches = [],
i = 0,
data = null;
for (i = 0; i < sprites.length; ++i) {
data = sprites[i].data;
if (x > data[0] && y > data[1] && x < data[2] && y < data[3]) {
matches.push(sprites[i].id);
}
}
return matches;
}
这是未经测试的,但应该有效。此外,如果您需要更好的性能,您将不得不以某种方式索引数据。
编辑:jsfiddle:http://jsfiddle.net/mP6cH/3/