一个数组内有多个多级嵌套的tree对象,写一个javaScript方法根据id找到这个id所在的根节点id
时间: 2024-05-15 16:20:09 浏览: 8
好的,这是一个技术问题,我可以回答。以下是一个可能的实现方式:
```javascript
function findRootNodeId(nodes, id) {
let node = nodes.find(node => node.id === id);
while (node.parentId !== null) {
node = nodes.find(n => n.id === node.parentId);
}
return node.id;
}
```
其中,`nodes` 是一个包含多个 `tree` 对象的数组,每个 `tree` 对象包含 `id` 和 `parentId` 属性,表示该节点的标识和父节点的标识。`id` 参数表示要查找的节点的标识。该方法会从 `nodes` 中找到该节点,然后一直向上查找父节点,直到找到根节点,最终返回根节点的标识。
相关问题
写个javaScript方法,根据子id获取到多级嵌套tree结构的根id
好的,以下是 JavaScript 方法代码:
function getRootId(tree, subId) {
let rootId = null;
const findRoot = (node) => {
if (node.id === subId) {
rootId = node.parentId;
return;
}
if (node.children) {
node.children.forEach(child => findRoot(child));
}
}
findRoot(tree);
return rootId;
}
其中,tree 是一个多级嵌套的树结构对象,subId 是需要查找的子节点的 id。函数会在树结构中查找到该子节点,并返回其根节点的 id。
一个tree结构多级嵌套的数组,根据id找到tree中对应的数据及其所有父节点,然后组成一个数组
可以使用递归来实现这个功能,具体步骤如下:
1. 定义一个函数,传入两个参数:数组和要查找的id。
2. 遍历数组,找到id对应的元素。
3. 如果找到了,将该元素添加到结果数组中。
4. 如果该元素有父节点,递归调用函数,并将父节点作为要查找的id传入。
5. 将返回的结果数组合并到当前结果数组中。
6. 返回结果数组。
代码如下:
```javascript
function findItemById(arr, id) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i].id === id) {
result.push(arr[i]);
if (arr[i].parentId) {
let parentArr = findItemById(arr, arr[i].parentId);
result = [...result, ...parentArr];
}
break;
}
if (arr[i].children && arr[i].children.length) {
let childArr = findItemById(arr[i].children, id);
if (childArr.length) {
result.push(arr[i]);
result = [...result, ...childArr];
break;
}
}
}
return result;
}
```
这个函数可以处理多级嵌套的tree结构数组,可以根据id查找到对应的元素及其所有父节点,并将结果组成一个数组返回。