Javascript 查找数组
我在JS中有一个数组,需要通过对它进行检查来查找数据,但我想知道我是如何做到的=/ 我的数组的结构如下所示:Javascript 查找数组,javascript,Javascript,我在JS中有一个数组,需要通过对它进行检查来查找数据,但我想知道我是如何做到的=/ 我的数组的结构如下所示: //global array spritea var listObj = { id: uid, data: [ abposx, abposy, (abposx+imgwidth), (abposy-imgheight) ] }; spritea.push(list
//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,其中x是>数据[0]&&y>数据[1]&&x
然后它返回id
有人知道怎么做吗?这真的让我很困惑=/对于大型阵列来说效率很低,因为它是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;
}
spritea=[
{
身份证号码:“135”,
数据:[9129345687]
},
{
身份证号码:“239”,
数据:[596382,068733467]
}
];
函数搜索精灵(精灵,x,y){
var matches=[],
i=0,
数据=空;
对于(i=0;idata[0]&&y>data[1]&&x
这是未经测试的,但应该有效。此外,如果您需要更好的性能,您将不得不以某种方式对数据进行索引
编辑:jsfiddle:哪个部分让您感到困惑?你能说得更具体一点吗?你试过什么?最简单的解决方案是创建一个在数组上迭代并检查每个条目的函数。x和y是什么?它们是abposx和abposy吗?那是我循环所有数据的唯一选择吗?如果是这样的话,如何接近这样一个循环。。我的目标是尽可能地尝试最有效的方法,因为我需要尽可能地降低强度=/x和y是鼠标在画布中的位置。它们都是整数值。然后你必须做一些索引。鉴于您发布的数据结构,循环是唯一可能的方法。您能解释一下索引吗。。。?索引需要维护一个单独的结构或改变数据的存储方式,以便以更高效的方式完成对特定条件的查询。至于索引这些数据的最有效方法,那将有点复杂。我知道,当我进入引擎的有效改进阶段时,我将进一步研究索引:)谢谢!有没有一种方法可以打印阵列,这样我就可以进行检查,因为它在这方面不起作用=/使用类似Chrome的开发工具,或者Firefox的Firebug扩展(我建议Chrome的开发工具胜过Firebug)。然后可以执行console.log(someVariable);它将在控制台上输出。要打开开发工具并在Chrome中查看控制台,请单击control+shift+j,然后单击console选项卡。
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;
}