js樹形結構與List結構轉換 以及深拷貝

1.List 結構轉換爲樹形結構node

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.深拷貝bash

// 數組深拷貝
			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;
			},
複製代碼
相關文章
相關標籤/搜索