递归真是一个神奇的东西。
之前自己不会实现,不了解递归,然后就查资料百度,看视频。
然后跟着视频手把手的学会了递归。。
然后过两天又会忘记。
今天又遇到一个js递归问题,实现对象转数组。
编写之前就想到用递归来完成。
但是实际上手的时候就发现不知道如何下手[并没有思考之后再去动手,而是直接上手写代码,坏习惯]。
怎么写都完不成。
后面就像先完成第一步,根据要求实现最基础的东西,然后你再看,就会找到完整的解决办法,不要着急。
原题:
http://ife.baidu.com/course/detail/id/50
数组转为对象:
var menuArr = [ [1, "Area1", -1], [2, "Area2", -1], [3, "Area1-1", 1], [4, "Area1-2", 1], [5, "Area2-1", 2], [6, "Area2-2", 2], [7, "Area1-2-3", 4], [8, "Area2-2-1", 6], ];
如上有一个用来存储多级菜单数据的数组,编写一个函数,将其转为如下的对象
var menuObject = { "1": { name: "Area1", subMenu: { "3": { name: "Area1-1" }, "4": { name: "Area1-2", subMenu: { "7": { name: "Area1-2-3" } } } } } …… }
解答结果:
//做递归不能一开始就想全部逻辑 //那样就真的递归了 //先实现单个值找后代 //实现之后你就发现 //怎么找后代的后代了 //数组转对象 function arrTurnObj(softNum = 0) { let newObj = new Object; for(let i in menuArr){ if(menuArr[i][2] == softNum){ newObj[menuArr[i][0]] = { "name" : menuArr[i][1], "subMenu" : arrTurnObj(menuArr[i][0]) }; } } return newObj; }