温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

JavaScript之parentId转换成children数据,并解析

发布时间:2020-07-01 15:58:47 来源:网络 阅读:2363 作者:爱笑嘚蛋蛋 栏目:web开发

1.用parentId的数据格式转换成有children的数据

var array = [];
    var iterator1 = function (treeNodes) {
        if (!treeNodes || !treeNodes.length) return;
		var parent,i = 0,obj = {};
		while(i < treeNodes.length ){
			node = treeNodes[i++];
			obj[node.id] = node;
			if(node.parentId){
				parent = obj[node.parentId];
				if(parent.children){
					node["parIndex"] = parent.parIndex +"."+ (parent.children.length + 1);
					node.cell[0] = node["parIndex"];
					parent.children.push(node);
				}else{
					node["parIndex"] = parent.parIndex +"."+ 1;
					node.cell[0] = node["parIndex"];
					parent.children = [node];
				}
			}else{
				node["parIndex"] = 1;
				array.push(node);
			}
		}
		
        return array;
    };

    console.log('------------- 递归 ------------------');
    iterator1(treeNodes);

2.将有children的数据拆成平级对象(非递归深度优先)(1   1.1    1.2    2 ...)

var array1 = [];
    var iterator2 = function (treeNodes) {
        var stack = [];

        if (!treeNodes || !treeNodes.length) return;

        //先将第一层节点放入栈
        for (var i = 0, len = treeNodes.length; i < len; i++) {
            stack.push(treeNodes[i]);
        }

        var item;

        while (stack.length) {
            item = stack.shift();

            console.log(item.id);
			
            //如果该节点有子节点,继续添加进入栈顶
            if (item.children && item.children.length) {
                stack = item.children.concat(stack);
            }
			delete item.children;
			delete item.parIndex;
			array1.push(item);
        }
    };

    console.log('------------- 非递归深度优先实现 ------------------');
    iterator2(array);

3.非递归广度优先(1     2   1.1   1.2 ...)

//非递归广度优先实现
    var iterator1 = function (treeNodes) {
        var stack = [];

        if (!treeNodes || !treeNodes.length) return;

        //先将第一层节点放入栈
        for (var i = 0, len = treeNodes.length; i < len; i++) {
            stack.push(treeNodes[i]);
        }

        var item;

        while (stack.length) {
            item = stack.shift();

            console.log(item.id);

            //如果该节点有子节点,继续添加进入栈底
            if (item.children && item.children.length) {

                stack = stack.concat(item.children);
            }
        }
    };

    console.log('------------- 非递归广度优先实现 ------------------');
    iterator1(treeNodes);


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI