【发布时间】:2019-05-21 14:40:00
【问题描述】:
我只需要通过查看单个节点来重新创建一个多维对象数组。
我尝试在循环中使用递归函数(Array.map)。
obj = [{
key: 0,
children: [{
key: 1,
children: [{
key: 2,
children: [{
key: 3,
children: []
},
{
key: 4,
children: []
}]
},
{
key: 5,
children: [{
key: 6,
children: []
},
{
key: 7,
children: []
},
{
key: 8,
children: []
}]
}]
}]
}]
function test(arg, level=0, arry=[]){
arg.map((data, i) => {
if(!data.arry){
arry.push(data.key);
data.arry = arry;
}
if(data.children){
test(data.children, level+1, data.arry);
}
})
}
test(obj);
函数test 应该构建并返回与obj 完全相同的对象。 这只是我遇到的问题的简化版本,这就是为什么它看起来很奇怪(返回我已经拥有的对象)。我最初的问题是关于从 DB 中获取部分 n 维对象数组,但不知道其原始尺寸。所以我必须“发现”维度,然后构建完全相同的对象副本。
【问题讨论】:
-
您可以使用 DFS 的变体来执行此操作。我将添加一个示例
-
请添加想要的结果或输入。这个不清楚,你想要什么。
-
功能测试应该构建并返回与 obj 完全相同的对象,但只查看单个节点。您可以想象它只有 obj 的第一个节点,然后使用 key 属性获取它。当所有节点和子节点都被发现时,它们应该被粘合在一起以形成完整的对象。粘合部分是我的问题所在。我是否必须为每个节点位置构建某种地图,然后使用地图重新创建它?
-
获取密钥的事情我还不清楚。假设我们运行直到给定节点没有更多子节点,我将发布解决方案。
标签: javascript arrays multidimensional-array arrayobject