数组扁平化,数组转树,树转数组

90 阅读1分钟
//数组扁平化 

const array = [1, 2, [3 ]]

const flat=function (array){
  let result=[]
for(let item of array){
  if(Array.isArray(item)){
    flat(item).forEach(element => {
      result.push(element)
    });
  }
  else{
    result.push(item)
  }
}
return result
}

const flat =function (array){
  // let result=[]
 return array.reduce((prev,cur)=>{
return prev.concat(Array.isArray(cur)?flat(cur):cur)
},[])

}

 function flat(arr){
  let arr2=[]
  arr.forEach((item)=>{
      if(Array.isArray(item)){
        arr2.push(...flat(item))
      }else{
        arr2.push(item)
      }
  })
  return arr2

 }



console.log(flat(array))


// 数组转树

const array = [
  { id: 1, name: '部门1', parentId: 0 },
  { id: 2, name: '部门2', parentId: 1 },
  { id: 3, name: '部门3', parentId: 1 },
  { id: 4, name: '部门4', parentId: 2 },
  { id: 5, name: '部门5', parentId: 2 },
  { id: 6, name: '部门6', parentId: 3 },
  { id: 7, name: '部门7', parentId: 4 },
];

// function totree(array,parentId=0){
// return array.filter(item=>item.parentId==parentId).map(item=>{
//   const child=totree(array,item.id)
//   if(child.length>0){
//     item.child=child
//   }
//   return item
// })
// }
  function arrtotree(arr,id=0){
    return arr.filter((item)=>item.parentId==id).map((item)=>{
      let child=arrtotree(arr,item.id)
      if(child.length>0){
        item.child=child
      }
      return item

    })
  }


  console.log(arrtotree(array))





// 树转数组
const tree = {
  id: 1,
  name: '部门1',
  children: [
    {
      id: 2,
      name: '部门2',
      children: [
        {
          id: 4,
          name: '部门4',
          children: [
            {
              id: 7,
              name: '部门7',
              children: []
            }
          ]
        },
        {
          id: 5,
          name: '部门5',
          children: []
        }
      ]
    },
    {
      id: 3,
      name: '部门3',
      children: [
        {
          id: 6,
          name: '部门6',
          children: []
        }
      ]
    }
  ]
};

// function treeToArray(node) {
//   let result = [];
//   result.push({ id: node.id, name: node.name });
//   node.children.forEach(child => {
//     result = result.concat(treeToArray(child));
//   });
//   return result;
// }

// let resultArray = treeToArray(tree);
// console.log(resultArray);

let treeToArr=(tree)=>{
    let res=[]
    res.push({id:tree.id,name:tree.name})
    tree.children.forEach((item)=>{
          res.push(...treeToArr(item))
    })
    return res
}
console.log(treeToArr(tree))

function treeToArray(node, parent = null) {
  let result = [];
  result.push({ id: node.id, name: node.name, parent });
  node.children.forEach(child => {
    result = result.concat(treeToArray(child, node.id));
  });
  return result;
}

let resultArray = treeToArray(tree);
console.log(resultArray);