gpt4 book ai didi

javascript - 递归函数查找给定 id 的顶级父级

转载 作者:行者123 更新时间:2023-11-30 10:57:52 24 4
gpt4 key购买 nike

给定以下数据集:

const accounts = [
{id: 2, children: [1,22,69], parentId: null},
{id: 3, children: [140, 122, 580], parentId: null},
{id: 1, children: [4,5,6], parentId: 2},
{id: 22, children: [8,9,2], parentId: 2},
{id: 4, children: [45,54,61], parentId: 1},
{id: 6, children: [40,89,20], parentId: 1},
{id: 40, children: [], parentId: 6},
....
]

我需要创建一个函数,它接受 id 作为参数并返回一棵树,从最顶层的父级及其子级(和兄弟级)开始。

在上面的示例中,只有 2 个顶级“帐户”,id:2 和 id:3。因此,函数调用可能类似于 findTree(89) ,它应该返回以帐户 id 2 及其子级开头的树,但显然会忽略帐户 id 3 及其子级,因为顶部level account 与 id 2 的顶级帐户无关,因此理想的响应是:

{
id: 2,
children: [
{ id: 1, children: [{id: 540, children: [{ id: 78},{}], parentId:1], parentId: 2},
.....
],
parentId: null
}

最好的方法是什么?我尝试过递归函数,但没有找到解决方案。

编辑:这里是代码的一部分:(groupArray 是一个包含平面列表中所有项目的数组,没有层次结构)

const makeTreeById = itemId => {
const startNode = _.find(groupArray, {id: itemId}) // grab the actual item, not the id
findTopParent(startNode)
}

然后是 findTopParent fn

const findTop = item => {
let top = item;
if(top.parentId) {
top = _.find(groupArray, {id: top.parentId}
return findTop(top)
}
return top;
}

我正在创建该函数,只是让它返回顶级帐户,从那里我计划构建实际的树,问题是 top 确实让我获得了顶级,但在某些时候它会被立即重新分配父级。

第二次编辑:很抱歉让大家感到困惑,正如你所看到的,我真的是新人。我有一个包含我需要的所有项目的数组。所以它看起来像这样:

// children here are only ids, not the actual elements, the element are part of // the list, but the children array for each element is just a reference.
data = [
{id: 1, children: [4,5,6], parentId: null},
{id: 2, children: [7,8,9], parentId: null},
{id: 3, children: [10,11,12], parentId: null},
{id: 4, children: [13,14,15], parentId: 1},
{id: 10, children: [20,21,22], parentId: 3}
{id: 14, children: [], parentId: 4}
....
]

最佳答案

您可以使用函数topParent找到所需的结果。只需在每次迭代中查找父项是否为空即可。

const accounts = [
{id: 2, children: [1,22,69], parentId: null},
{id: 3, children: [140, 122, 580], parentId: null},
{id: 1, children: [4,5,6], parentId: 2},
{id: 22, children: [8,9,2], parentId: 2},
{id: 4, children: [45,54,61], parentId: 1},
{id: 6, children: [40,89,20], parentId: 1},
{id: 40, children: [], parentId: 6}
];

function topParent(id) {
var obj = accounts.find((v) => v.id == id);
return obj.parentId == null ? obj : topParent(obj.parentId)
}

console.log(topParent(6));

关于javascript - 递归函数查找给定 id 的顶级父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59272306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com