javascript - 在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 root
、matrix[0][2]
should yieldD
和matrix[-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 中定义坐标系?
解决方案
我将使用查找对象,而不是使用不适用于像这样的负索引的数组。
假设 x 和 y 始终是数字,这是一种可能的解决方案。
var lookupTable = {};
function setElement(x, y, value) {
lookupTable[x +"," + y] = value;
}
function getElement(x, y) {
return lookupTable[x +"," + y];
}
推荐阅读
- python - Series 的真值是模棱两可的。排序列表时使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
- visual-studio-code - vscode intellisense cmake-tools 与外部库
- javascript - 如何使用基于世界位置坐标的值转换 Object3D 坐标?
- c# - 将未知大小的二维数组快速转换为c#
- sql - 将两个查询的结果除以 SQL 中的另一个查询
- javascript - JavaScript 等效于 .NET 的 Enum.HasFlag()
- reactjs - 带有反应 js 的 froala 编辑器 3 - 如何在初始化时隐藏工具栏?
- java - 如何在 Spring Data 中部分使用 Hazelcast?
- javascript - 如何阻止 SVG 文本悬停停止渐变填充
- c# - 使用 MVVM 正确初始化程序