gpt4 book ai didi

javascript - 给定一个表示层次结构的数组,在 JS 中将数据输出为树形

转载 作者:行者123 更新时间:2023-11-30 14:34:46 26 4
gpt4 key购买 nike

给定一个数据文件,其中包含一个表示层次结构的数组。通过在 Javascript 中编写脚本来创建树数据结构。以树的形式输出数据:

数据文件:

["transportation.cars.Mazda",
"transportation.cars.Honda",
"transportation.cars.Toyota",
"transportation.train.lightRail",
"transportation.train.rapidTransit",
"transportation.waterVehicle.ferry",
"transportation.waterVehicle.boats"
...]

树形输出:

 root
transportation
cars
Mazda
Honda
Toyota
train
lightRail
rapidTransit
waterVehicle
ferry
boats

我的尝试:

var root = new Node('root'); 

var arr = ["transportation.cars.Mazda",
"transportation.cars.Honda",
"transportation.cars.Toyota",
"transportation.train.lightRail",
"transportation.train.rapidTransit",
"transportation.waterVehicle.ferry",
"transportation.waterVehicle.boats"
]

for(var i of arr){
var res=i.split(".");
root.addChild(new Node(res[0]));
res[0].addChild(new Node(res[1]));
res[1].addChild(new Node(res[2]));
}

this.addChild = function(node) {
node.setParentNode(this);
this.children[this.children.length] = node;
}
console.log(root);

我正在尝试使用 JavaScript 创建树结构,但它没有与 Java 中相同的功能(即它没有类方法,除非使用 Typescript。)

最佳答案

您可以使用类似于特里树的东西。添加节点的方式必须更加具体。但是这样的事情是可能的。

function Node(word)
{
this.value = word;
this.children = {};
}

function AddDotChain(chain)
{
let arr = chain.split('.');
let currentNode = this;

function recurse(currentIndex)
{
if(currentIndex === arr.length)
{
return;
}

let currentWord = arr[currentIndex];
if(currentNode.children[currentWord])
{
currentNode = currentNode[currentWord];
return recurse(currentIndex + 1);
}

let child = new Node(currentWord);
currentNode.children[currentWord] = child;
currentNode = child;
return recurse(currentIndex + 1);
}
}

您只需将整个链条插入其中而不将其分开。我的逻辑某处可能存在缺陷,但总体思路应该可行。如果您想减少递归的开销,也可以迭代地完成此操作。请原谅我的困惑,尽量尽快打字。

这是 repl.it 上草率的草率实现。 enter image description here

关于javascript - 给定一个表示层次结构的数组,在 JS 中将数据输出为树形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593926/

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