js树形结构与List结构转换 以及深拷贝

2,995 阅读1分钟

1.List 结构转换为树形结构

var getJsonTree = function(data, parentId) {
    var itemArr = [];
    for (var i = 0; i < data.length; i++) {
        var node = data[i];
        if (node.parentId == parentId) {
            var newNode = {};
            newNode.id = node.id;
            newNode.name = node.name;
            newNode.url = node.url;
            newNode.icon = node.icon;
            newNode.nodes = getJsonTree(data, node.id);
            itemArr.push(newNode);
        }
    }
    return itemArr;
};
$scope.data = getJsonTree($scope.menus, "");

2.树形结构转换为List结构

      deep(node){
        let stack = node
        let data = []
        while(stack.length){
          let pop = stack.pop();
          data.push(pop.id)
          let children = pop.children
          if(children){
            for(let i = children.length-1; i >=0; i--){
              stack.push(children[i])
            }
          }
        }
        return data
      },

3.深拷贝

			// 数组深拷贝
			deepCopy(obj) {
				// 只拷贝对象
				if (typeof obj !== 'object') return;
				// 根据obj的类型判断是新建一个数组还是一个对象
				var newObj = obj instanceof Array ? [] : {};
				for (var key in obj) {
					// 遍历obj,并且判断是obj的属性才拷贝
					if (obj.hasOwnProperty(key)) {
						// 判断属性值的类型,如果是对象递归调用深拷贝
						newObj[key] = typeof obj[key] === 'object' ? this.deepCopy(obj[key]) : obj[key];
					}
				}
				return newObj;
			},