javascript - 数据结构转换
问题描述
如何转换父关系数组结构
const array = [{id: 1, parentId: 2}, {parentId: null, id: 2}];
到一个二维数组,其中嵌套数组的第一个元素是没有 parentId 的父元素,最后一个元素是子/叶元素。
前任:
const array_2 = [
[{ id: 1, parentId: null}, { id:2, parentId: 1 }, { id: 3, parentId: 2}], [...], [...]
]
解决方案
如果我理解正确,您想收集从树的根节点到每个节点的路径:
const nodes = [
{id: 1, parentId: 6},
{id: 2, parentId: 1},
{id: 3, parentId: 4},
{id: 4, parentId: 6},
{id: 5, parentId: 1},
{id: 6, parentId: null}, // Root
{id: 7, parentId: 2},
];
const nodeMap = new Map(nodes.map(node => [node.id, node]));
const paths = nodes.map(node => {
const path = [{...node}]; // Or: const path = [node];
let parentId = node.parentId;
while (parentId !== null) {
const parentNode = nodeMap.get(parentId);
if (parentNode === undefined) {
throw new Error(`No node exists with ID ${parentId}`);
}
path.unshift({...parentNode}); // Or: path.unshift(parentNode);
parentId = parentNode.parentId;
}
return path;
});
console.log(paths);
这是我在上面的代码中使用的示例树:
从根到每个节点的路径:
Node-1: 6 <- 1
Node-2: 6 <- 1 <- 2
Node-3: 6 <- 4 <- 3
Node-5: 6 <- 1 <- 5
Node-6: 6
Node-7: 6 <- 1 <- 2 <- 7
...这就是我的代码作为 2D JavaScript 数组返回的内容。
推荐阅读
- swift - 有没有办法避免 Swift 保留/释放高性能代码?
- javascript - 在更新 forEach 数组时,在 forEach 内调用 AWS 开发工具包 S3
- wpf - 避免在折叠时读取 XAML 依赖属性
- python - 当我使用 pd.read_csv 读取大文件时出现 UnicodeDecodeError
- javascript - 如何在 Vue 模板内的 Moment.js 格式化程序上转义 HTML 字符串?
- javascript - Woocommerce 通过 JS 更改产品变体
- jenkins - Jenkins 远程执行器经常断开连接
- android - 为什么 Mockito 在参数正确时会抱怨 misusing.WrongTypeOfReturnValue?
- php - PHP + 大型 CSV 文件 + Shell
- python - 如何在熊猫数据框组中移动一列,然后重新连接为单个数据框?