坐标对象

时间:2016-02-28 12:52:48

标签: javascript html arrays matrix

我正在尝试制作一个2D矩阵动态系统,用于识别X,Y坐标(true)或非(false)是否存在“对象”。

简化示例代码:

var coords = [[]]; // Matrix is over 10,000 x 10,000
var objectX = 76;
var objectY = 54;

coords[objectX][objectY] = true;

//Check to see if there is an object @ coordinates
if(coords[100][65] == false || coords[100][65] === undefined)
{
    //There is no object @ 100 x 65
}
else
{
    //Object detected @ 100 x 65
}

但似乎我不能这样做,因为我认为我必须从[0] [0],[0] [1],[0] [2],...,等开始;或某事......

此外,矩阵太大,无法通过将其置于循环中来定义。我无法装载数小时。

我不介意保持数组段'undefined',因为我在代码中将其视为false。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:3)

在解决第二个维度之前,您需要确保第一个维度数组存在:

if (coords[objectX] === undefined) coords[objectX] = [];
coords[objectX][objectY] = true;

如果在前面你知道你实际上需要一个元素用于每个X,Y位置(这将消耗更多的内存),然后首先用循环初始化矩阵:

for (var objectX=0; objectX <= maxX; objectX++) {
    coords[objectX] = [];
    for (var objectY=0; objectY <= maxY; objectY++) {
        coords[objectX][objectY] = false;
    }
}

根据您的需要,如果您使用不同的结构,可能会获得更好的内存使用和性能:

var coords = [];
coords[objectX * (maxX + 1) + objectY] = true;

或者如果你不知道X和Y的范围:

coords = {}; // object whose properties will be X,Y strings:
coords[objectX + ',' + objectY] = true;