需要将数据数组转换为树:
const array = [{
id: 5,
name: 'vueJS',
parentId: [3]
}, {
id: 6,
name: 'reactJS',
parentId: [3]
}, {
id: 3,
name: 'js',
parentId: [1]
}, {
id: 1,
name: 'development',
parentId: null
}, {
id: 4,
name: 'oracle',
parentId: [1,2]
}, {
id: 2,
name: 'data-analysis',
parentId: null
}];
现在,它使用以下函数工作:
function arrayToTree(array, parent) {
var unflattenArray = [];
array.forEach(function(item) {
if(item.parentId === parent) {
var children = arrayToTree(array, item.id);
if(children.length) {
item.children = children
}
unflattenArray.push(item)
}
});
return unflattenArray;
}
console.log(arrayToTree(array, null));
关于这个特性,我有两个问题:
发布于 2019-04-27 03:58:20
我觉得这个问题令人费解。听起来,您真正想说的是,数组表示“树中节点类型的定义”,而不是树中节点的实际实例。
因此,您的问题是需要将“定义”从数组复制到树中的新“实例”节点。这将使“oracle”显示两次,因为您将为其父数组中的每个父节点创建一个新的“oracle实例”节点。在技术上,它不需要是一个深入的副本,这取决于您的使用,因此您可以用Object.assign来证明概念,但是每个实例都指向同一个父数组,这可能会或不会对您添加到定义中的该引用值或将来的引用值造成问题。
最后,根据树的大小和真正想要做的事情,您可能希望转换为节点/边表示的树,而不是父/子树。对于非常大的数据集,递归有时会给您带来问题。
对不起,我在打电话,所以有些东西在密码上很难看出来。
https://stackoverflow.com/questions/55874567
复制相似问题