当前位置: 首页 > Web前端 > CSS

记得一道阿里笔试题

时间:2023-03-30 18:11:44 CSS

收到阿里巴巴的笔试通知,一共六道题。我紧张地打开了,可惜两道菜还没吃完就已经是时间了。分享你在下面做的一个问题。问题让menu=[{"Id":1,"ParentId":null,"Sort":0,"Name":"Menu1"},{"Id":2,"ParentId":1,"Sort":0,"名称":"Menu1-1"},{"Id":3,"ParentId":1,"排序":1,"名称":"Menu1-2"},{"Id":4,"ParentId":2,"Sort":2,"Name":"Menu1-1-2"},{"Id":5,"ParentId":2,"Sort":1,"Name":"Menu1-1-1"},{"Id":6,"ParentId":null,"Sort":1,"Name":"Menu2"},{"Id":7,"ParentId"":6,"Sort":0,"Name":"Menu2-1"},{"Id":8,"ParentId":6,"Sort":1,"Name":"Menu2-2"},{"Id":9,"ParentId":8,"Sort":2,"Name":"Menu2-2-2"},{"Id":10,"ParentId":8,"Sort":1,"Name":"Menu2-2-1"},{"Id":11,"ParentId":10,"Sort":0,"Name":"Menu2-2-1-1"}]转换以上数据结果为'

'这种格式解题思路本题考的只要是递归用法,首先是数据结构必须转换,转换为如下格式{"Id":1,"ParentId":null,"Sort":0,"Name":"Menu1","children":[{"Id":2,"ParentId":1,"Sort":0,"Name":"Menu1-1","children":[{"Id":5,"ParentId":2,"Sort":1,"Name":"菜单1-1-1"},{"Id":4,"ParentId":2,"排序":2,"名称":"菜单1-1-2"}]},{"Id":3、"ParentId":1,"Sort":1,"Name":"Menu1-2"}]}主要用到了递归的思想,具体方法如下functiondigui(total,item){if(!total||total.children===0)returnfor(letobjoftotal){if(obj.Id===item.ParentId){obj.children=obj.children||}[]//这里根据Id和ParentId生成子数据obj.children.push(item)obj.children.sort((a,b)=>a.Sort-b.Sort)}digui(obj.children,item)}}functiongenData(menu){returnmenu.reduce((total,item,index)=>{如果(item.ParentId){digui(total,item)}else{total.push(item)}returntotal},[])}数据进行转换,然后转换后的数据生成一个字符串,同样使用递归方法函数genHtml(item){return`
  • ${item.Name}${(item.children?item.children.map(_item=>genHtml(_item)).join(''):'')}
`}最后得到结果genData(menu).map(genHtml).join('')总结做题太慢了,请注意toit公众号漂浮在北上广深?,定期推送优质美文。看完别走,给个赞?啊,赞?更好!

猜你喜欢