Javascript 给定一个表示层次结构的数组,将数据输出到JS中的树形式中

Javascript 给定一个表示层次结构的数组,将数据输出到JS中的树形式中,javascript,arrays,tree,parent,nodechildren,Javascript,Arrays,Tree,Parent,Nodechildren,给定一个具有表示层次结构的数组的数据文件。通过在Javascript中编写脚本来创建树数据结构。以树形形式输出数据: root transportation cars Mazda Honda Toyota train lightRail rapidTransit waterVehicle ferry boats 数据文件: ["transportation.cars.Mazda

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

 root
  transportation
    cars
      Mazda
      Honda
      Toyota
    train 
      lightRail
      rapidTransit
    waterVehicle
      ferry
      boats 
数据文件:

["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,否则它没有类方法)。

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

功能节点(word)
{
这个值=单词;
this.children={};
}
函数AddDotChain(chain)
{
设arr=chain.split('.');
让currentNode=this;
函数递归(currentIndex)
{
if(currentIndex==阵列长度)
{
返回;
}
设currentWord=arr[currentIndex];
if(currentNode.childrent[currentWord])
{
currentNode=currentNode[currentWord];
返回递归(currentIndex+1);
}
让子节点=新节点(currentWord);
currentNode.childrent[currentWord]=子节点;
currentNode=子节点;
返回递归(currentIndex+1);
}

}
您可以这样做,使用树形数据结构,您只需在包含数据的字符串数组上循环并按点分割,然后将每个项添加到树实例中,该树实例将在您执行将数组和输出作为树形数据结构的函数时创建

此代码可以帮助您

var arr=[“运输.汽车.马自达”,
“交通、汽车、本田”,
“交通、汽车、丰田”,
“交通、火车、轻轨”,
“运输、火车、快速运输”,
“交通、水车、渡轮”,
“交通、水车、船只”
];
功能节点(数据){
这个数据=数据;
这是:children=[];
}
功能树(数据){
this.root=null;
}
Tree.prototype.contains=函数(数据){
返回此项。查找(数据)?真:假;
}
Tree.prototype.add=函数(数据,节点){
const newNode=新节点(数据);
如果(!this.root){
this.root=newNode;
返回;
}
const parent=node?this.find(node):null;
如果(家长){
如果(!this.contains(数据)){
parent.children.push(newNode);
}
}
}
Tree.prototype.find=函数(数据){
if(this.root){
const queue=[this.root];
while(queue.length){
const node=queue.shift();
if(node&&node.data==数据){
返回节点;
}
对于(var i=0;i日志(createTreeOfTransportation(arr))请更新您的问题并澄清您遇到的问题。您已经告诉我们您正在尝试做什么,但不清楚问题是什么。这里有很多问题,您认为
新节点(字符串)
在Javascript中有什么作用?此外,您正在检查是否尚未在节点中添加。例如,transportation列出了7次,但您只需要1个节点,在这里您可以添加节点。在JS中,由于它没有新的节点方法,也许我应该将其替换为var root=”“。我可以添加一个函数来检查父节点是否存在。