demo的你们可以举一反三,未来的工作过程中遇到递归算法,可

lxf2023-12-14 08:50:01

序言

在咱们实施过程中,难免会出现前面赋值解决树结构,此刻很多人都想到递归算法,递归算法常常提到,在具体开发设计中我们真的可以表达出来递归算法吗?递归这个概念不用多说,定义讲这么多有什么用,最重要的是实际应用,下边直接去demo,带着大家去了解递归算法,期待看了demo的你们可以举一反三,未来的工作过程中遇到递归算法,可灵活“照猫画虎”画出来的大伙儿需要格式~

demo1

数据信息

后面传出去的二维数组为:

demo的你们可以举一反三,未来的工作过程中遇到递归算法,可

这一二维数组中children的等级,也都不确定性,假如我们接受到这样一个树结构数据信息,要做一个自己写的勾选框,下面需要做的解决是:应该给每一层有id属性目标里边放一个checked=false特性

递归算法塞checked=false

handleData = (sendArr) => {            
 sendArr.forEach((item) => {                
  item.checked = false;                
  if (item.children && item.children.length) {                    
   this.handleData(item.children);                
   }            
 });        
}

启用更改原先二维数组

handleData(arr)

这时arr已经成为了大家想要的结果,若是在vue中,那样我们应该深拷贝,编码如下所示

let newArr = JSON.parse(JSON.stringify(arr))
handleData(newArr)
arr = JSON.parse(JSON.stringify(newArr))

依据id,掌握到现阶段id所属的对象,把要对象checked取反

由于我们的需求是勾选框,因此当用户点击该原素时,我们能掌握到现阶段点一下元素id,那我们要做的就是掌握到现阶段id所属的对象,把要对象checked取反,编码如下所示:

findIdFunc(sendArr, id) {            
 if (sendArr && sendArr.length) {                
  for (let item of sendArr) {                    
   if (item.id== id) {                        
    item.checked = !item.checked;                        
    return;                    }                    
   if (item.children && item.children.length) {                        
     this.findIdFunc(item.children, id);                    
    }                
   }            
 }        
}

启用,进行实际效果

findIdFunc(arr, 3333)

同上边,若是在vue新项目里没有变化,那我们就深拷贝

let newArr = JSON.parse(JSON.stringify(arr));
this.findIdFunc(newArr, 3333);
arr = JSON.parse(JSON.stringify(newArr));

demo2

demo1我认为是最基本的demo,下面就让我们要求不会改变的前提下,只更改算法设计,来试一试吧~

数据信息

demo的你们可以举一反三,未来的工作过程中遇到递归算法,可

此次数据信息确实原先的前提下,child或是child,里边能够套好多次,随后多了一个list,在其中list中才是交通要塞checked=false的区域,说到这里的朋友们可以自己出手,依据demo1,看看能不能解决这一数据类型呀~

建立模型(塞checked=false)

大家还是和以前一样,先往list数组对象里装checked=false

selfFunc = (porpsArr) => {  
 porpsArr.forEach(propsItem => {    
  if (propsItem.list?.length) {      
   propsItem.list.forEach(lItem => {        
    lItem.checked = false;      
   })    
  }    
  if (propsItem.child?.length) {      
   selfFunc(propsItem.child)    
  }  
 })
}
//启用
selfFunction(arr) //启用还是和以前一样,没有效果的就拿深拷贝

依据id,掌握到现阶段id所属的对象,把要对象checked取反

findIDFunc = (propArr, id) => {  
 if (propArr?.length) {    
  for (let propsItem of propArr) {  //这儿应用for of 还可以在寻找以后退出循环      
   if (propsItem.list?.length) {        
    for (let item of propsItem.list) {         
     if (item.id == id) {                item.checked = !item.checked            
      return;          
     }        
   }      
 }      
   findIDFunc(propsItem.child, id)    
  }  
 }
}
//启用
findIDFunc(arr, '22') //启用还是和以前一样,没有效果的就拿深拷贝

末尾

看过这俩demo,想必大家递归算法有了实践经验,能够保存起来,在工作上碰到要递归算法时,看这两个demo,照猫画虎就阔以啦~~后边我在和大伙儿梳理,分享一下在vue部件中应用递归算法部件,其实就是元件的递归算法

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!