查找数组

时间:2012-03-20 04:54:22

标签: javascript

我在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?

任何人都知道如何做到这一点?它让我很困惑= /

1 个答案:

答案 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/