JavaScript 递归的几种写法

it2022-05-05  140

匿名函数实现递归

知识点 arguments.callee 对于arguments大家应该都认识吧。callee就是函数自身 官方建议用命名函数实现递归。(也就是叫你调用函数名)

[ { id: 1, children: [...] }, { id: 2, children: [...] } ] // 把一个树展平。 function recursion(arr){ var flatObj = {}; (function(arr){ for(var i=0,len=arr.length; i<len; i++){ var item = arr[i]; if(item.children){ flatObj[item.id] = item.children; arguments.callee(item.children) } // 其它逻辑代码 } })(arr); return flatObj; }

例:递归调用接口,结果组装成 map

function recursiveFun(param){ var arr = []; fetch('https://blog.csdn.net/jx520/getMenu?pid='+param) .then(response =>response.json()) .then(jsonArray => { var textArr = []; jsonArray.forEach(function (item, index, jsonArr) { if(item.isFolder){ arr.push([[item.title] , recursiveFun(item.key)]); // 有子级,递归调用 }else{ textArr.push(item.title); // 叶结点内容先压进数组,下面会转成字符串 } }); // 有内容就压入,没有内容就跳过。 textArr.length && arr.push(textArr.join(',')); }); return arr; } var json = recursiveFun(0); // 从根节点开始 // 等异步返回结果再执行才看的到效果。 JSON.stringify(json,null,4);

格式化数据

var path = []; var arr = []; function rev(list){ list.forEach( (v, i) => { if(typeof v === "string"){ arr.push(path.join('-') + " : " + v); }else{ path.push(v[0]); rev(v[1]); path.pop(); } }); } rev(json[0][1]); arr.join('\n');

最新回复(0)