Javascript 查找数组

Javascript 查找数组,javascript,Javascript,我在JS中有一个数组,需要通过对它进行检查来查找数据,但我想知道我是如何做到的=/ 我的数组的结构如下所示: //global array spritea var listObj = { id: uid, data: [ abposx, abposy, (abposx+imgwidth), (abposy-imgheight) ] }; spritea.push(list

我在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,其中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;
}
​