求大神指点js生成树结构

JavaScript027

求大神指点js生成树结构,第1张

// 生成树结构

function tree(list) {

const result = []

for (let value of list) {

// 排除空字符串的情况

if (!value) {

continue

}

const values = value.split('/')

// 查找树结构的当前级别是否已经存在,不存在则创建对象,并添加入列表。

let current = result.find(item =>item.name === values[0])

if (current === void 0) {

current = {}

result.push(current)

}

for (let i = 0, length = values.lengthi <lengthi++) {

current.name = values[i]

if (i <length - 1) {

// 如果还有下一级内容,判断当前是否有 children,没有则构建.

if (current.children === void 0) {

current.children = []

}

// 查找下一级对象,为下一遍遍历构建对象

let nextCurrent = current.children.find(item =>item.name === values[i + 1])

if (nextCurrent === void 0) {

nextCurrent = {}

current.children.push(nextCurrent)

}

current = nextCurrent

}

}

}

return result

}

============ 假装分割线 ===========

以上代码是生成树的函数,调用 tree 函数并传入你的 input 数据,返回值就是生成的树。百科没找到传代码的地方了。

关于遗传算法解决最小生成树的问题。

这是prufer编码的代码:

#include stdio.h>

#define END 0 // 结束

#define L_BRACKET 1 // 左括号

#define R_BRACKET 2 // 右括号

#define NUMBER 4 // 数

typedef struct _node

{

int value// 节点值

int childs// 子节点数

struct _node *parent// 父节点

struct _node *first_child// 第一个孩子节点

struct _node *sibling// 下一个兄弟节点

}NODE

typedef struct _token

{

int type// 标记类型(左、右括号,数)

int value// 值(仅当类型为数时有效)

}TOKEN

typedef void (*FUNC)(NODE *)

static NODE *pSmallest = 0// 指向最小的叶子节点

/* 取下一个标记

input 输入串

pToken 用于返回取得的标记

返回值 取走下一个标记后的输入串

*/

char *GetNextToken(char *input,TOKEN *pToken)

{

char *p,ch

int value

pToken->type = END

/* 跳过空白 */

p = input

while ((ch = *p) &&ch != '(' &&ch != ')' &&!isdigit(ch))

p++

switch(ch)

{

case '(': pToken->type = L_BRACKETp++break

case ')': pToken->type = R_BRACKETp++break

default:

/* 识别数 */

if (isdigit(ch))

{

value = 0

while ((ch = *p) &&isdigit(ch))

{

value = 10 * value + (ch - '0')

p++

}

pToken->type = NUMBER

pToken->value = value

}

break

}

/* 根据是否到达串尾返回不同的值*/

return (*p == '\0' ? 0 : p)

}

/* 根据输入内容构造树

input 输入串

返回值 构造的树的根节点指针

*/

NODE *BuildTree(char *input)

{

char *p

TOKEN token

NODE *pCur,*pNew,*pRoot,*pLast

p = inputpCur = pLast......

存储过程获取,其实都是一样的。只不过底层的查询语句变成存储过程写的罢了。

数据传输用JSON,其实就是KEY和VALUE。把查询出来的集合、实体、各种结果包装成MAP类型。可以方便的与JSON进行转换读写。

根据需要自定义实体类,以便前后台的统一调用。这样的实体类可以与实体表出入很大。完全根据需要制定。