# traversal.js
## 背景 我们经常会处理一些有规律的树形结构的数据,往往我们会使用遍历去找寻我们需要的数据。很多时候我们为了快速的完成任务,我们会采用最简单直接的方法去解决,那就是使用递归,但是使用递归有时候会造成尾递归,当数据量比较大的时候,就会形成爆栈;而且递归的方式属于深度遍历的一种,但是有时候,广度遍历效率更高,当然,每次开发如果都要去评估两种方法之间的差距的话,这都是一件麻烦的事,所以具体使用的时候,我们可以直接使用两者,然后进行对比,在实际开发中选择更恰当的那个。这个库比较简单,纯当自己学习使用,但是如果不小心帮助到了你,那真是太幸运了。(本库参照的另外一名作者,在它的基础上改了点东西,加了些自己需要的功能,就相当于是重复造了个自己的轮子吧)
使用说明
兼容commonjs AMD 以及普通的加载方式
commonjs/AMD
npm install data-tree-traversal
var traversal = require('data-tree-traversal');
普通引用
直接去github地址,然后下载traversal.js文件即可运行
[github](https://github.com/Yidoon/tree-traversal)
var traversal = window.traversal;
示例
//数据源
var data = [{
id: '1',
value: 1,
children: [
{
id: '2',
value: 2,
children: [{
id: '4',
value: 4,
},
{
id: '5',
value: 5,
children: [{
id: '8',
value: 8,
}]
}
]
},
{
id: '3',
value: 3,
children: [{
id: '6',
value: 6,
},
{
id: '7',
value: 7,
children: [{
id: '9',
value: 9,
children: [{
id: '10',
value: 10,
},
{
id: '11',
value: 11,
}
]
}]
}
]
}
]
}];
普通方法
// BFS
var result = ''
traversal.breath({
data: data,
callback: function (temp) {
result+=temp.id
}
})
console.log(result) // '1234567891011'
// DFS
var result = ''
traversal.depth({
data: data,
callback: function (temp) {
result+=temp.id
}
})
console.log(result) // '1245836791011'
说明
#### traversal.breath 和 traversal.depth接收的参数都是一样的
options = {
data: data, //数据源
callback: function (temp) {} //每次遍历的回调对象 temp表示当前正在遍历的对象
}
### 路径方法
var options = {
data: data,
matchValue: '10',
matchKey: 'id',
storeKey: 'value',
loopKey: 'children',
callback: function (temp) {
console.log(temp.id)
}
}
var result = traversal.path(options);
console.log([ 1, 3, 7, 9, 10 ])
#### 说明 该方法用于保存指定值的路径,返回的是一个数组,当然你可以对返回的数据进行自己想要的处理,这只是一个简单的返回。参数说明如下
options = {
data: data, // 数据源
matchValue: '10', // 要比较的值
matchKey: 'id', // 要进行比较的值的key
storeKey: 'value', // 要存储的值的key
loopKey: 'children', // 子节点名 默认值为children
callback: function (temp) { // 结束的回调 temp表示当前找到了的数据对象
console.log(temp.id)
}
}