gpt4 book ai didi

arrays - 如何将树转换为数组?

转载 作者:搜寻专家 更新时间:2023-10-31 23:30:20 25 4
gpt4 key购买 nike

我有一个树对象,它是一棵不规则的树,每次运行我的代码时, child 的名字和键值都会改变。例如:

{
addressRouter: 192.168.0.1,
addresses:
{
address1: 'A',

},
{
address2: 'B',

},
{
ports: [
{
portA: 'C',
portB: null
},


}
route: 'D',

}

因此名称:'addressRouter'、'addresses'、'address1' 等及其键是不可预测的,但我需要将树对象转换为具有以下格式的数组:

addressRouter
addresses/address1
addresses/address2
addresses/ports/portA
addresses/ports/portB
route

然后将他们的 key 放在他们旁边。

我有这个函数来构建树,这是正确的:

const iterate = (obj, obj2) => {
Object.keys(obj).forEach(key => {

obj2[key] = obj[key];

if (typeof obj[key] === 'object') {
iterate(obj[key], obj2)
}
})
}

但是在调试之后,我发现它并没有得到所有的分支。

最佳答案

我们可以使用递归函数遍历树并获取所需格式的键。

我假设给定树对象中的地址是一个对象数组

function processTree(obj, rootKey) {
const arr = [];
obj && Object.keys(obj).forEach(key => {
const val = obj[key];
if (val && val instanceof Array) {
val.forEach(item => arr.push(...processTree(item, key)))
}else if (val && typeof(val) == "object") {
arr.push(...processTree(val, key));
}else {
arr.push(key);
}
});
return rootKey ? arr.map(item => rootKey + "/" + item) : arr;
}

console.log(processTree(tree, null));

结果:["addressRouter", "addresses/address1", "addresses/address2", "addresses/ports/portA", "addresses/ports/portB", "route"]

关于arrays - 如何将树转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57903622/

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