ihgazni2 / nvdfs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

  • depth-first-tree in list/array
  • npm install nvdfs
/*
    import {njfunc,njterm} from "nvdfs"
    import * as assert from "assert";
*/
var njfunc = require('nvdfs').njfunc
var njterm = require('nvdfs').njterm
var assert = require('assert')

var sdfs   = njfunc.creat_sdfs();
var nj0 = sdfs[0]
var nj1 = njfunc.append_child(sdfs,nj0)
var nj2 = njfunc.append_child(sdfs,nj1)
var nj3 = njfunc.append_child(sdfs,nj1)
var nj4 = njfunc.append_child(sdfs,nj3)
var nj5 = njfunc.add_rsib(sdfs,nj4)
var nj17 = njfunc.append_child(sdfs,nj0)
var nj18 = njfunc.append_child(sdfs,nj17)
var nj19 = njfunc.append_child(sdfs,nj17)


var sub_sdfs = njfunc.creat_sdfs();
var nj6 = sub_sdfs[0]
var nj7 = njfunc.append_child(sub_sdfs,nj6)
var nj8 = njfunc.append_child(sub_sdfs,nj6)
var nj9 = njfunc.append_child(sub_sdfs,nj6)
var nj10 = njfunc.append_child(sub_sdfs,nj9)
var nj11 = njfunc.append_child(sub_sdfs,nj9)
var nj12 = njfunc.append_child(sub_sdfs,nj9)
var nj13 = njfunc.append_child(sub_sdfs,nj9)
var nj14 = njfunc.append_child(sub_sdfs,nj9)
var nj15 = njfunc.append_child(sub_sdfs,nj9)
var nj16 = njfunc.append_child(sub_sdfs,nj15)

var [chsdfs,chroot] = njfunc.add_lsib_tree(sdfs,sub_sdfs,nj17)


/*
> njterm.show_sdfs_with_id(sdfs)
[0] : b95e3539-be36-4025-a3d8-df2bdf350fc9@1593867843304
├── [1] : 1a282060-0cdc-4f22-b811-50cd1751d2c2@1593867843430
│   ├── [2] : 1146d14d-073b-4506-8f59-b70cd45e39c6@1593867843483
│   └── [3] : d633da1f-1702-4530-a316-0489ef0a93c0@1593867843543
│       ├── [4] : 3c6c25f3-49b6-4553-a049-a55c80105661@1593867843613
│       └── [5] : 379a2b6d-4573-41d0-a5ab-f77039f07387@1593867843681
├── [6] : 51c06ac5-9909-4c35-ae0a-2cd93d270a00@1593867844103
│   ├── [7] : c037a284-12e6-477c-b1b4-2e321e80cc0b@1593867844415
│   ├── [8] : c6b1de87-b204-4104-927b-a6a65fce5bdf@1593867844475
│   └── [9] : d14e7ffa-8c64-48a4-b61f-a84348ff2515@1593867844600
│       ├── [10] : c4481211-3fa2-4e87-bedc-69deff08bd20@1593867844718
│       ├── [11] : 8530b35c-c07b-48db-83e3-3520e3629f5c@1593867844822
│       ├── [12] : 276e0d50-672f-492a-b210-aba1c551481c@1593867844874
│       ├── [13] : db9dad82-d15d-4ced-849e-f1c8c1a8fb2a@1593867844975
│       ├── [14] : 13d0e582-52b5-483b-ab70-191cc378b028@1593867845062
│       └── [15] : bf3aa269-a5dc-4479-b1c0-748a08fac21e@1593867845133
│           └── [16] : 7b306bab-9dc0-4a59-b8fc-4715339f9fc1@1593867845193
└── [17] : ce4582e8-6b4b-4c9e-9b2d-ff4a4d3536c3@1593867843738
    ├── [18] : 9c26d6e9-137b-40bd-b976-3ba3882b8dd0@1593867843785
    └── [19] : c30dbe05-1b7a-4f8b-8e75-b5402b9056fd@1593867843844
undefined
>
*/
  • creat_rj():Njson 创建 一个 叶子根节点
  • creat_nj():Njson 创建 一个 未初始化的叶子根节点
  • creat_sdfs():Array<Njson> 创建 只有一个根节点的 sdfs-array
  • is_inited(nj:Njson):boolean 是否已经初始化 _tree !== undefined
  • is_root(nj:Njson):boolean 是否是根 _tree === _id
  • is_fstch(nj:Njson):boolean 是否是父节点第一个儿子(有可能同时是最后一个)
  • is_lstch(nj:Njson):boolean 是否是父节点最后一个儿子(有可能同时是第一个)
  • is_midch(nj:Njson):boolean 是否是父节点中间儿子,不是第一个,也不是最后一个
  • is_leaf(nj:Njson):boolean 是否是叶子节点
  • is_connectable(nj:Njson):boolean 是否可以直接添加到其他节点上(root节点或者未初始化节点,其他节点必需先从原先所在的sdfs disconnect)
  • is_lonely(nj:Njson):boolean 是否是独子(没有兄弟)
  • get_nj_via_id_from_njarr(njarr:Array<Njson>,_id:string):Njson 通过id获取 nj 节点
  • get_sdfs_seq_via_id(sdfs:Array<Njson>,_id:string):number 获取在sdfs-array中的index
  • get_fstch(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL 获取first-child,叶子节点first-child为null
  • get_lstch(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL 获取last-child,叶子节点first-child为null
  • get_children(njarr:Array<Njson>,nj:Njson):Array<Njson> 获取所有子节点(按照顺序)
  • get_which_child(njarr:Array<Njson>,nj:Njson,which:number):NJ_OR_NULL 获取某个child
  • get_some_children(njarr:Array<Njson>,nj:Njson,...whiches:Array<number>):Array<Njson> 获取一些child
  • get_parent(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL 获取parent
  • get_root(njarr:Array<Njson>):NJ_OR_NULL 获取root
  • get_ances(njarr:Array<Njson>,nj:Njson,including_self:boolean=false):Array<Njson> 获取先祖链
  • get_which_ance(njarr:Array<Njson>,nj:Njson,which:number):NJ_OR_NULL 获取某个先祖(包括自己)
  • get_some_ances(njarr:Array<Njson>,nj:Njson,...whiches:Array<number>):Array<Njson> 获取一些先祖(包括自己)
  • get_rsib(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL 获取右兄弟
  • get_lsib(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL 获取左兄弟
  • get_lstsib(njarr:Array<Njson>,nj:Njson,including_self:boolean=false):NJ_OR_NULL 获取最后一个兄弟节点(默认不包括自己)
  • get_fstsib(njarr:Array<Njson>,nj:Njson,including_self:boolean=false):NJ_OR_NULL 获取第一个兄弟节点(默认不包括自己)
  • get_sibs(njarr:Array<Njson>,nj:Njson,including_self:boolean=false):Array<Njson> 获取所有兄弟节点(默认不包括自己)
  • get_psibs(njarr:Array<Njson>,nj:Njson):Array<Njson> 获取preceding 兄弟节点
  • get_fsibs(njarr:Array<Njson>,nj:Njson):Array<Njson> 获取following 兄弟节点
  • get_which_sib(njarr:Array<Njson>,nj:Njson,which:number):NJ_OR_NULL 获取某个兄弟节点(包括自己)
  • get_some_sibs(njarr:Array<Njson>,nj:Njson,...whiches:Array<number>):Array<Njson> 获取一些兄弟节点(包括自己)
  • get_sibseq(njarr:Array<Njson>,nj:Njson):number 获取在兄弟节点中序号
  • get_rsib_of_fst_ance_having_rsib(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL 沿着先祖链条(不包括自己)查找第一个拥有右兄弟的节点,返回这个节点的右兄弟
  • get_lsib_of_fst_ance_having_lsib(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL 沿着先祖链条(不包括自己)查找第一个拥有左兄弟的节点,返回这个节点的左兄弟
  • get_deses(njarr:Array<Njson>,nj:Njson,including_self:boolean=false):Array<Njson> 所有后代的sdfs-list
  • get_drmost_des(njarr:Array<Njson>,nj:Njson):Njson 最下最右的后代
  • get_dlmost_des(njarr:Array<Njson>,nj:Njson):Njson 最下最左的后代
  • get_fstlyr_deses(njarr:Array<Njson>,nj:Njson):Array<Njson> 第一层后代(children)
  • get_lstlyr_deses(njarr:Array<Njson>,nj:Njson):Array<Njson> 最后一层后代
  • get_which_lyr_deses(njarr:Array<Njson>,nj:Njson,which:number):Array<Njson> 某一层后代
  • get_some_lyrs_deses(njarr:Array<Njson>,nj:Njson,...whiches:Array<number>):Array<Njson> 某几层后代
  • get_depth(njarr:Array<Njson>,nj:Njson):number 深度(从上向下)
  • get_breadth(njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true):number 在当前层的广度序号
  • get_count(njarr:Array<Njson>):number 整个sdfs中元素个数
  • get_height(njarr:Array<Njson>,nj:Njson):number 高度(从下向上)
  • get_lyr(njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true):Array<Njson> 当前层
  • get_fstlyr_des_depth(njarr:Array<Njson>,nj:Njson):number|null 第一层后代深度
  • get_lstlyr_des_depth(njarr:Array<Njson>,nj:Njson):number|null 最后一层后代深度
  • get_which_lyr_des_depth(njarr:Array<Njson>,nj:Njson,which:number):number|null 某一层后代深度
  • get_sdfs_next(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL sdfs(only traverse open-tag) 下一个
  • get_sdfs_prev(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL sdfs(only traverse open-tag) 前一个
  • get_sdfs(njarr:Array<Njson>,nj?:NJ_OR_UNDEFINED):Array<Njson> sdfs(only traverse open-tag)
  • get_edfs_next(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL edfs(only traverse close-tag) 下一个
  • get_edfs_prev(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL edfs(only traverse close-tag) 前一个
  • get_edfs(njarr:Array<Njson>,nj:Njson):Array<NJ_OR_NULL> edfs(only traverse close-tag)
  • clear_$visited(njarr:Array<Njson>):Array<Njson> sedfs(traverse both open-tag and close-tag) traverse 内部使用
  • get_sedfs_next(njarr:Array<Njson>,nj:Njson):NJ_OR_NULL sedfs(traverse both open-tag and close-tag) 下一个
  • get_sedfs_prev(njarr:Array<Njson>,nj:Njson,visited:BL_OR_UNDEFINED):NJ_OR_NULL sedfs(traverse both open-tag and close-tag) 前一个
  • is_sedfs_traverse_finished(nj:Njson,start_id:string):boolean
  • get_sedfs(njarr:Array<Njson>,nj:Njson,deepcopy:boolean=false,clear:boolean=true):Array<Njson> sedfs
  • prepend_child(sdfs:Array<Njson>,nj:Njson,child?:any):Njson 前插子节点
  • append_child(sdfs:Array<Njson>,nj:Njson,child?:any):Njson 追加子节点
  • insert_child_via_index(sdfs:Array<Njson>,nj:Njson,which:number,child?:NJ_OR_UNDEFINED):Njson 插入子节点
  • insert_child_before(sdfs:Array<Njson>,nj:Njson,child?:NJ_OR_UNDEFINED):Njson
  • insert_child_after(sdfs:Array<Njson>,nj:Njson,child?:NJ_OR_UNDEFINED):Njson
  • add_lsib(sdfs:Array<Njson>,nj:Njson,lsib?:NJ_OR_UNDEFINED):Njson 添加左邻居
  • add_rsib(sdfs:Array<Njson>,nj:Njson,rsib?:NJ_OR_UNDEFINED):Njson 添加右邻居
  • update_tree_via_connto_nj(njarr:Array<Njson>,nj:Njson):Array<Njson>
  • update_depth_via_connto_nj(njarr:Array<Njson>,nj:Njson,diff:number):Array<Njson>
  • prepend_child_tree(njarr:Array<Njson>,ch_njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true) 前插子树
  • append_child_tree(njarr:Array<Njson>,ch_njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true) 后插子树
  • add_rsib_tree(njarr:Array<Njson>,ch_njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true) 添加左邻居树
  • add_lsib_tree(njarr:Array<Njson>,ch_njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true) 添加右邻居树
  • insert_child_tree_via_index(njarr:Array<Njson>,ch_njarr:Array<Njson>,nj:Njson,which:number,is_already_sdfs:boolean=true) 插入子树
  • insert_child_tree_before(njarr:Array<Njson>,ch_njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true)
  • insert_child_tree_after(njarr:Array<Njson>,ch_njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true)
  • update_tree_when_disconnected(sdfs:Array<Njson>)
  • update_depth_when_disconnected(sdfs:Array<Njson>)
  • leafize(nj:Njson)
  • rootize(nj:Njson)
  • rootize_tree(
  • uninitize(nj:Njson)
  • njarr2sdfs_with_is_already_sdfs(njarr,is_already_sdfs:boolean=true):Array<Njson>
  • disconnect(njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true):any 从当前tree-sdfs 脱离
  • rm_fstch(njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true):any 移除第一个child
  • rm_lstch(njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true):any 移除最后一个child
  • rm_which_child(njarr:Array<Njson>,nj:Njson,which:number,is_already_sdfs:boolean=true):any 移除某一个child
  • rm_all_children(njarr:Array<Njson>,nj:Njson,is_already_sdfs:boolean=true):any 移除所有children
  • rm_some_children(njarr:Array<Njson>,nj:Njson,whiches:Array<number>,is_already_sdfs:boolean=true) 移除一些children
  • njarr2sdfs(njarr:Array<Njson>):Array<Njson> 把乱序的节点变成sdfs顺序
  • nj2ele(njarr:Array<Njson>,nj:Njson):Ejson
  • _nj2unhandled_ele(nj:Njson):any
  • sdfs2mat(njarr:Array<Njson>,sdfs:Array<Njson>|undefined):any sdfs 变成一个二维数组
  • sdfs2edfs(njarr:Array<Njson>,sdfs:Array<Njson>|undefined):any sdfs 变成edfs
  • sdfs2sedfs(njarr:Array<Njson>,sdfs:Array<Njson>,deepcopy:boolean=false,clear:boolean=true) sdfs 变成sedfs
  • edfs2sdfs(njarr:Array<Njson>,edfs:Array<Njson>):any edfs 变成sdfs
  • edfs2mat(njarr:Array<Njson>,edfs:Array<Njson>):any edfs 变成一个二维数组
  • edfs2sedfs(njarr:Array<Njson>,edfs:Array<Njson>,deepcopy:boolean=false,clear:boolean=true) edfs 变成sedfs
  • sedfs2sdfs(njarr:Array<Njson>,sedfs:Array<Njson>):any sedfs 变成sdfs
  • sedfs2mat(njarr:Array<Njson>,sedfs:Array<Njson>):any sedfs 变成一个二维数组
  • sedfs2edfs(njarr:Array<Njson>,sedfs:Array<Njson>):any sedfs 变成edfs

About


Languages

Language:TypeScript 71.7%Language:JavaScript 28.1%Language:Shell 0.1%