Javascript数组查找对象或元组

Javascript Array find Object or tuple

本文关键字:元组 对象 查找 数组 Javascript      更新时间:2023-09-26

我正在为地图上的一些"元素"建立一个运动逻辑。我已经用它们的X和Y位置定义了贴图,现在我需要为贴图分配一个元素。一般来说,我想这样做:[0,1]=> ElementX,然后将其存储到"某物"中。

然而,与JavaScript数组我不能做"某事"。indexOf[0,1]或ElementX(它是一个对象)或事件ElementXId.

所以我最后做的是:

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

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

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

我只是想知道这有多糟糕或多慢,如果有其他解决方案。

谢谢。

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

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

以下内容有什么问题?

TileElementVector[x][y]

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

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

,其中maxY是Y在这个假设的二维网格中可以取的最大值。就速度而言,这些都不是真正的问题。但是,如果真的想要一维存储数组,可以使用下面这个简洁的数学技巧:

TileElementVector[x * maxY + y]

这将确保每个元素获得唯一的索引。这实际上是"扁平化"数组。但是,由于使用起来有点棘手,我建议使用第一种解决方案。

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;