JavaScript 树,节点包含数组
JavaScript Tree with nodes containing arrays
我需要创建一棵树。
每个节点都有两个二维数组,"statusTable"和"moveTable"。
每个子项都必须继承其父项的 statusTable(它的副本)。
每个节点应有 10 个子节点。
树的创建应该在达到"最大深度"时停止。
当我使用下面的代码时,我意识到所有节点都指向相同的状态表。
请帮忙吗?
function NODE(p, statTable, movTable, depth)
{
this.par = p;
this.statusTable = statTable.slice();
this.moveTable = movTable.slice();
this.depth = depth;
}
function createChildren(parentNode)
{
var childNode, m;
if (parentNode.depth == maxDepth) return;
for (m = 0; m < 10; m++) {
moveTable = [];
mainTable = parentNode.statusTable.slice();
childNode = new NODE(parentNode, mainTable, moveTable, parentNode.depth + 1);
createChildren(childNode);
}
}
Slice 会创建数组的副本,但您只在外部数组上使用它。内部数组是相同的。
你有
var inner = [1];
var outer = [inner];
var copy = outer.slice();
copy === outer // false
copy[0] === outer[0] // true
copy[0][0] = 3; // problem
console.log(outer[0][0]) // 3, expecting 1
您需要的是深层副本而不是切片:
function deepCopy(arr) {
var copy = arr.slice();
for (var i=0; i<copy.length; i++) {
if (copy[i] instanceof Array) {
copy[i] = deepCopy(copy[i]);
}
}
return copy;
}
相关文章:
- 包含数组的对象的QML ListModel追加中断
- 正在发送请求中包含数组的qx.io.request.Xhr请求
- 将包含数组的字符串转换为实际数组
- jQuery.inArray(),即使它包含数组中的值,也返回 -1
- 如果输入包含数组中的任何单词
- 如果值包含数组中的一个或多个
- JavaScript 如何检查包含数组的对象是否为空
- 初始化包含数组的javascript对象
- 检查字符串是否包含数组中的某个字符串
- AJAX/javascript:解析包含数组的JSON
- 通过javascript将包含数组的对象数组传递给MVC操作
- 如何将包含数组的对象添加到类中
- JavaScript 树,节点包含数组
- Sencha Touch - 存储包含数组的 JSON 文件
- 预期响应包含数组但获取对象
- jquery:如何选中属性名称中包含数组值的复选框
- 如何在初始化新数组时使用变量(包含数组形式的文本)
- 嵌套的 ng-重复包含数组的对象数组
- 如何对包含数组的javascript对象进行排序
- 什么最适合性能:带键的数组或包含数组的键