1.0.3 • Published 5 years ago

data-tree-traversal v1.0.3

Weekly downloads
6
License
MIT
Repository
github
Last release
5 years ago

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)
   }
}