真的是太久没有写难的业务逻辑了,导致稍微难的业务逻辑,都要想好久好久,这不今天就遇到难的逻辑了。
最后实在捣鼓不出来,不想浪费时间了,于是就求助于万能的群友了,最终解决了,这给我打击的,不要不要的,我要去刷LeetCode了(就你,还是算了吧,碰到稍微难点的题目,就放弃了,省省吧)。
那么我也给大伙们分享下,我遇到的题目吧(看看我有多?):
//给定以下的数据 let arr = [ { path: 'test/1.txt', stream: '' }, { path: 'test/文件夹1/1-1.txt', stream: '' }, { path: 'test/文件夹2/2-1.txt', stream: '' }, ]; //组合成这样的数据 let tree = [ { title: 'test', children: [ { title: '1.txt', children: [], }, { title: '文件夹1', children: [ { title: '1-1.txt', children: [], }, ], }, { title: '文件夹2', children: [ { title: '2-1.txt', children: [], }, ], }, ], }, ];
从头到尾,我的脑袋瓜里想到的只有递归才能做的出来,结果啪啪的打脸了,大佬用了两层的循环+半个小时不到,写完了,我自闭了。
//大佬的题解,接上面 let tree1 = []; for (const item of arr) { const pathArr = item.path.split('/'); let tem = tree1;//关键思路① for (let i = 0; i < pathArr.length; i++) { const index = tem.findIndex((item) => item.title === pathArr[i]); if (index < 0) { const newAddIndex = tem.push({ title: pathArr[i], children: [], }); tem = tem[newAddIndex - 1].children;//关键思路② } else { tem = tem[index].children;//关键思路③ } } } console.log(tree1);
在看完大佬的解题思路后,直呼妙啊,强啊,道谢后,就马上滚去继续完成下面的部分代码了。
其实,大家如果有兴趣学编程的话,可不要被我说的跑啦,其实所谓的业务逻辑,大家真遇到了就把它当成数学题去做就好了,一类的题目都有对应的解题方法,记住这类题的解题思路/技巧,下次再遇到就给解决不就好了。
要自己那些大佬也是从小白过来的,所以只要我们不认输,有死磕,持续学习的精神,成为大佬指日可待啊,而且大佬们都很谦虚的,你们都不知道大佬还安慰我呢,叫我多看看一些经典项目里面的代码,学学人家的架构/思路。
所以你们给我等着,等着我写完文章了啊,跑啦,哈哈哈。