首页 > 解决方案 > 在javascript中表示坐标,并在恒定时间内访问元素

问题描述

我有一个树结构。

             root(0,0)
               /  \
              /    \
             /      \
         A(-1,1)   B(1,1)
           / \      / \
          /   \    /   \
         /     \        \  
     C(-2,2)  D(0,2)   E(2,2)      

JSON

{
  "root": object, // Node at coordinate (0,0)
  "A": object, // Node at coordinate (-1,-1)
  "B": object, // Node at coordinate (1,1)
  "C": object, // Node at coordinate (-2,-2)
  "D": object, // Node at coordinate (0, 2)
  "E": object, // Node at coordinate (2,2)
  ...
}

我希望能够维护将节点名称存储在单元格中的坐标矩阵(2D 数组)。

例如,像matrix[0][0]should yield rootmatrix[0][2]should yieldDmatrix[-2][2]如果可能的话应该 yield之类的查询C。这将让我在给定 x 和 y 坐标的恒定时间内访问元素。


尝试

var matrix = new Array([]);
matrix[x][y] = nodeName; // nodeName is keys: "root", "A", "B" etc.

但是,当 x 是负值时,我得到Uncaught TypeError: Cannot set property '1' of undefined

如何使用数组或任何其他方式在 javascript 中定义坐标系?

标签: javascriptmultidimensional-arraycoordinates

解决方案


我将使用查找对象,而不是使用不适用于像这样的负索引的数组。

假设 x 和 y 始终是数字,这是一种可能的解决方案。

var lookupTable = {};

function setElement(x, y, value) {
  lookupTable[x +"," + y] = value;
}

function getElement(x, y) {
  return lookupTable[x +"," + y];
}

推荐阅读