美文网首页
Ife Javascript Task 07 -- 201705

Ife Javascript Task 07 -- 201705

作者: Brash | 来源:发表于2017-05-16 00:13 被阅读13次

    今天完成的事情:

    1. 学习数据结构 -- 树
      英文学习资料
      https://code.tutsplus.com/articles/data-structures-with-javascript-tree--cms-23393
      中文学习资料
      https://segmentfault.com/a/1190000000740261
    2. 晚上写了简单的Divcreator函数,明天继续写吧。

    明天计划的事情:

    1. 写个函数接受层数,并生成相应的div
    2. 学习一下iterate的方式

    遇到的问题:

    1.暂无

    收获:

    下面是一个简单的例子,可以作为参考和学习的资料。

    function Node(data) {
        this.data = data;
        this.parent = null;
        this.children = [];
    }
    
    function Tree(data) {
        var node = new Node(data);
        this._root = node;
    }
    
    var tree = new Tree('CEO');
     
    // {data: 'CEO', parent: null, children: []}
    tree._root;
    
    Tree.prototype.traverseDF = function(callback) {
     
        // this is a recurse and immediately-invoking function 
        (function recurse(currentNode) {
            // step 2
            for (var i = 0, length = currentNode.children.length; i < length; i++) {
                // step 3
                recurse(currentNode.children[i]);
            }
     
            // step 4
            callback(currentNode);
             
            // step 1
        })(this._root);
     
    };
    
    Tree.prototype.traverseDF = function(callback) {
     
        // this is a recurse and immediately-invoking function 
        (function recurse(currentNode) {
            // step 2
            for (var i = 0, length = currentNode.children.length; i < length; i++) {
                // step 3
                recurse(currentNode.children[i]);
            }
     
            // step 4
            callback(currentNode);
             
            // step 1
        })(this._root);
     
    };
    
    Tree.prototype.traverseBF = function(callback) {
        var queue = new Queue();
         
        queue.enqueue(this._root);
     
        currentTree = queue.dequeue();
     
        while(currentTree){
            for (var i = 0, length = currentTree.children.length; i < length; i++) {
                queue.enqueue(currentTree.children[i]);
            }
     
            callback(currentTree);
            currentTree = queue.dequeue();
        }
    };
    
    Tree.prototype.contains = function(callback, traversal) {
        traversal.call(this, callback);
    };
    
    tree.contains(function(node){
        if (node.data === 'two') {
            console.log(node);
        }
    }, tree.traverseBF);
    
    Tree.prototype.add = function(data, toData, traversal) {
        var child = new Node(data),
            parent = null,
            callback = function(node) {
                if (node.data === toData) {
                    parent = node;
                }
            };
     
        this.contains(callback, traversal);
     
        if (parent) {
            parent.children.push(child);
            child.parent = parent;
        } else {
            throw new Error('Cannot add node to a non-existent parent.');
        }
    };
    
    Tree.prototype.remove = function(data, fromData, traversal) {
        var tree = this,
            parent = null,
            childToRemove = null,
            index;
     
        var callback = function(node) {
            if (node.data === fromData) {
                parent = node;
            }
        };
     
        this.contains(callback, traversal);
     
        if (parent) {
            index = findIndex(parent.children, data);
     
            if (index === undefined) {
                throw new Error('Node to remove does not exist.');
            } else {
                childToRemove = parent.children.splice(index, 1);
            }
        } else {
            throw new Error('Parent does not exist.');
        }
     
        return childToRemove;
    };
    
    function findIndex(arr, data) {
        var index;
     
        for (var i = 0; i < arr.length; i++) {
            if (arr[i].data === data) {
                index = i;
            }
        }
     
        return index;
    }
    
    
    

    相关文章

      网友评论

          本文标题:Ife Javascript Task 07 -- 201705

          本文链接:https://www.haomeiwen.com/subject/kjncxxtx.html