Javascript Array查找Object或tuple

时间:2015-08-06 20:53:23

标签: javascript arrays tuples associative-array

我正在为地图上的某些“元素”构建移动逻辑。 我有他们的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] =>元素并将其存储在一个全新的数组中。

2 个答案:

答案 0 :(得分:0)

以下是什么问题?

TileElementVector[x][y]

您必须初始化数组的两个维度,如下所示:

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

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

TileElementVector[x * maxY + y]

这将确保每个元素都获得唯一索引。这基本上是“扁平化”#34;数组。但是,由于使用起来有点棘手,我建议使用第一种解决方案。

答案 1 :(得分:0)

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;