数组转tree:
巧妙的应用了对象保存的是引用的特点,每次将当前节点的 id 作为 key,保存对应节点的引用信息,遍历数组时,每次更新 objMap 的 children 信息,这样 objMap中保留了所有节点极其子节点,最重要的是,我们只需要遍历一遍数组
function toTree(data) { let result = [] let map = {}; let o = {'obj': ''} data.forEach(item => { map[item.id] = item; }); data.forEach(item => { let parent = map[item.parent]; if(parent) { (parent.children || (parent.children = [])).push(item); } else { result.push(item); } }); o['obj'] = result[0] return o; }
二维数组数组全排列: function getArrayByArrays(arrays) { var arr = [""]; for (var i = 0; i < arrays.length; i++) { arr = getValuesByArray(arr, arrays[i]); } return arr; } function getValuesByArray(arr1, arr2) { var arr = []; for (var i = 0; i < arr1.length; i++) { var v1 = arr1[i]; for (var j = 0; j < arr2.length; j++) { var v2 = arr2[j]; var value = v1 + v2; // console.log(value.split('')) arr.push(value); } } return arr; } const result = getArrayByArrays(data).map(function(item){ return item.split('') })