Javascript 数组查找对象或元组

Javascript Array find Object or tuple

我正在为地图上的某些 "elements" 构建移动逻辑。 我有由它们的 X 和 Y 位置定义的图块,现在我需要将一个元素分配给图块。 一般而言,我想做这样的事情:[0,1] => ElementX,然后将其存储到 "something".

然而,对于 JavaScript 数组,我无法执行 "something".indexOf [0,1] 或 ElementX(其对象)或事件 ElementXId。

所以我最后做的是:

TileVector["" + x + y] = [x,y] //translates to TileVector["6060"] = [60,60]

TileElementVector["" + x + y] = ElementX;

现在,当我想查看特定坐标上的内容时,我只需将 x 和 y 坐标串起来。

我只是想知道这有多糟糕或有多慢,以及是否还有其他解决方案。

谢谢。

我将详细说明它是如何使用的。 创建了一个 200 x 200 的地图,其中包含 1 像素的图块。为了将每个图块映射到特定的 id(以便快速访问),我创建了一个这样的数组:TileVector[""+x+y] = [x+y] 正如指出的那样,这不是防弹的

现在,当一个元素被放置在地图上时,我需要将该元素与地图上的那个位置相关联,因此 [x+y] => 元素并将其存储在一个全新的数组中。

下面有什么问题吗?

TileElementVector[x][y]

您必须像这样初始化数组的两个维度:

TileElementVector = [];
for (var i = 0; i < maxY; i++){
  TileElementVector[i] = [];
}

其中 maxY 只是 Y 在这个假设的二维网格中可以取的最大值。 在速度方面,none 这是一个真正的问题。但是如果你真的想要一维存储数组,你可以使用这个巧妙的数学技巧:

TileElementVector[x * maxY + y]

这将确保每个元素都有一个唯一的索引。这本质上是 "flattening" 数组。但是,由于使用起来有点棘手,我推荐第一种解决方案。

function toIndex(x, y, rowSize) {
    return y * rowSize + x;
}

function fromIndex(idx, rowSize) {
    return {
        x: idx % rowSize,
        y: Math.floor(idx / rowSize)
    };
}

var colSize, rowSize;
var TileElementVector = new Array(colSize * rowSize);

var tileIdx = toIndex(xTile, yTile, rowSize);
var coords = fromIndex(tileIdx, rowSize);
coords.x == xTile && coords.y == yTile;