递归真是一个神奇的东西。
之前自己不会实现,不了解递归,然后就查资料百度,看视频。
然后跟着视频手把手的学会了递归。。
然后过两天又会忘记。
今天又遇到一个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;
}