gpt4 book ai didi

javascript - 设置展平对象层次结构中的深度级别属性

转载 作者:行者123 更新时间:2023-12-02 16:04:55 25 4
gpt4 key购买 nike

给定这个无序平面对象数组

var obj = [
{
id: 1,
parentId: null
},
{
id: 2,
parentId: 1
},
...
}];

我想根据层次结构深度级别设置属性$level。 (没有最大深度)

所以结果是

var obj = [
{
id: 1,
parentId: null,
$level = 0
},
{
id: 2,
parentId: 1,
$level = 1
},
...
}];

我正在考虑为此编写一个递归函数,该函数将遍历数组并找到匹配的 parentId == id ,然后如果它也有父级,则再次找到匹配的...而记录到达根所需的调用次数。但这是大量的数组迭代。看起来很糟糕。

所以认为这是一个已解决的问题。但搜索并没有给我任何有用的东西。所以我来到了这里:)

你会如何解决这个问题?

最佳答案

基本上有一个递归函数setLevel(parentId, level)。起始值为 null 和级别零。该函数有两个部分。首先获取parentId等于给定parentId的所有行。然后遍历行并分配级别并使用 id 作为parentId 的新值和增加的级别调用自身。

var obj = [
{
id: 2,
parentId: 1
},
{
id: 1,
parentId: null
},
{
id: 5,
parentId: 4
},
{
id: 4,
parentId: 2
},
{
id: 3,
parentId: 2
},
];
function setLevel(parentId, level) {
obj.filter(function (el) {
return el.parentId === parentId;
}).forEach(function (el) {
el.$level = level;
setLevel(el.id, level + 1);
});
}
setLevel(null, 0);
document.write('<pre>'+ JSON.stringify(obj, null, 4) + '</pre>');

关于javascript - 设置展平对象层次结构中的深度级别属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30864656/

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