我正在尝试制作一个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。
我该如何做到这一点?
答案 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;