原生js vue react通用的递归函数

简介: 原生js vue react通用的递归函数

1.递归函数的由来

       递归函数的由来可以追溯到数学中的递归概念和数学归纳法。

       在数学中,递归是指通过定义基本情况和递推公式,将一个问题分解为更简单的、与原问题具有相同结构的子问题,并用子问题的解来构建原问题的解。递归的思想在解决一些数学问题时非常有用。

       当计算机科学发展起来后,人们将递归思想应用到程序设计中,形成了递归函数的概念。递归函数是一种能够调用自身的函数。 递归函数的使用可以有效地解决一些需要重复执行相似任务或处理具有递归结构的问题。

递归函数的设计通常包括两部分:

  1. 基本情况(边界条件):定义问题的最简单情况和对应的解,作为递归的终止条件。
  2. 递推公式(递归关系):描述问题和子问题之间的联系,通过递归调用函数本身来解决规模较小的子问题。

        递归函数的执行过程中,每次调用都会创建一个新的函数上下文(包括参数、局部变量等),并将其压入执行栈。递归函数通过不断调用自身,并处理更小规模的子问题,直到达到基本情况为止,然后逐步返回结果,并依次弹出执行栈中的上下文,完成整个递归过程。

递归函数在实际编程中有广泛的应用,例如树的遍历、图的搜索、排列组合、动态规划等领域。但需要注意的是,递归函数的设计要合理,避免无限递归或重复计算,以确保程序的正确性和效率。

2.代码逻辑

假设下方的数据是我们从接口中获取到的

1. 
2. 
3.      var temp = [
4.      {
5.        "id": 1,
6.        "pid": 0,
7.        "title": "一档",
8.        "money": "666.00"
9.      },
10.       {
11.         "id": 2,
12.         "pid": 0,
13.         "title": "二档",
14.         "money": "1900.00"
15.       },
16.       {
17.         "id": 3,
18.         "pid": 1,
19.         "title": "一档1级",
20.         "money": "1800.00"
21.       },
22.       {
23.         "id": 4,
24.         "pid": 0,
25.         "title": "三档",
26.         "money": "2000.00"
27.       },
28.       {
29.         "id": 5,
30.         "pid": 0,
31.         "title": "四档",
32.         "money": "2200.00"
33.       },
34.       {
35.         "id": 6,
36.         "pid": 5,
37.         "title": "四档1级",
38.         "money": "2200.00"
39.       },
40.       {
41.         "id": 7,
42.         "pid": 2,
43.         "title": "二档1级",
44.         "money": "3700.00"
45.       },
46.       {
47.         "id": 8,
48.         "pid": 4,
49.         "title": "三档1级",
50.         "money": "2000.00"
51.       },
52.       {
53.         "id": 10,
54.         "pid": 0,
55.         "title": "五档",
56.         "money": "250.00"
57.       },
58.       {
59.         "id": 12,
60.         "pid": 10,
61.         "title": "五档1级",
62.         "money": "10000.00"
63.       },
64.       {
65.         "id": 18,
66.         "pid": 1,
67.         "title": "一档2级",
68.         "money": "1800.00"
69.       },
70.       {
71.         "id": 21,
72.         "pid": 0,
73.         "title": "六档",
74.         "money": "0.00"
75.       },
76.       {
77.         "id": 24,
78.         "pid": 1,
79.         "title": "一档3级",
80.         "money": "1800.00"
81.       },
82.       {
83.         "id": 25,
84.         "pid": 2,
85.         "title": "二档2级",
86.         "money": "4100.00"
87.       },
88.       {
89.         "id": 26,
90.         "pid": 2,
91.         "title": "二档3级",
92.         "money": "4400.00"
93.       },
94.       {
95.         "id": 27,
96.         "pid": 4,
97.         "title": "三档2级",
98.         "money": "2000.00"
99.       },
100.      {
101.        "id": 28,
102.        "pid": 4,
103.        "title": "三档3级",
104.        "money": "2000.00"
105.      },
106.      {
107.        "id": 29,
108.        "pid": 5,
109.        "title": "四档2级",
110.        "money": "2200.00"
111.      },
112.      {
113.        "id": 30,
114.        "pid": 5,
115.        "title": "四档3级",
116.        "money": "2200.00"
117.      },
118.      {
119.        "id": 31,
120.        "pid": 2,
121.        "title": "1",
122.        "money": "4100.00"
123.      },
124.      {
125.        "id": 32,
126.        "pid": 2,
127.        "title": "3",
128.        "money": "4400.00"
129.      },
130.      {
131.        "id": 38,
132.        "pid": 0,
133.        "title": "八档",
134.        "money": "0.00"
135.      },
136.      {
137.        "id": 39,
138.        "pid": 10,
139.        "title": "轻微",
140.        "money": "100000000.00"
141.      },
142.      {
143.        "id": 44,
144.        "pid": 42,
145.        "title": "一级",
146.        "money": "12323.00"
147.      },
148.      {
149.        "id": 45,
150.        "pid": 42,
151.        "title": "二级",
152.        "money": "755.00"
153.      },
154.      {
155.        "id": 47,
156.        "pid": 42,
157.        "title": "三级",
158.        "money": "44444.00"
159.      },
160.      {
161.        "id": 49,
162.        "pid": 48,
163.        "title": "一级",
164.        "money": "21234.00"
165.      },
166.      {
167.        "id": 50,
168.        "pid": 42,
169.        "title": "三级",
170.        "money": "44444.00"
171.      },
172.      {
173.        "id": 52,
174.        "pid": 48,
175.        "title": "一级",
176.        "money": "21234.00"
177.      },
178.      {
179.        "id": 57,
180.        "pid": 53,
181.        "title": "一级",
182.        "money": "4332.00"
183.      },
184.      {
185.        "id": 61,
186.        "pid": 38,
187.        "title": "啊",
188.        "money": "50.00"
189.      },
190.      {
191.        "id": 62,
192.        "pid": 1,
193.        "title": "1231",
194.        "money": "1.00"
195.      },
196.      {
197.        "id": 63,
198.        "pid": 0,
199.        "title": "阿斯顿飞过",
200.        "money": "0.00"
201.      },
202.      {
203.        "id": 66,
204.        "pid": 1,
205.        "title": "1",
206.        "money": "23.00"
207.      },
208.      {
209.        "id": 67,
210.        "pid": 2,
211.        "title": "123",
212.        "money": "123.00"
213.      },
214.      {
215.        "id": 70,
216.        "pid": 2,
217.        "title": "123",
218.        "money": "123.00"
219.      },
220.      {
221.        "id": 71,
222.        "pid": 38,
223.        "title": "桀桀桀",
224.        "money": "0.00"
225.      },
226.      {
227.        "id": 72,
228.        "pid": 12,
229.        "title": "11",
230.        "money": "11.00"
231.      },
232.      {
233.        "id": 73,
234.        "pid": 12,
235.        "title": "11",
236.        "money": "11.00"
237.      },
238.      {
239.        "id": 77,
240.        "pid": 1,
241.        "title": "测试一下",
242.        "money": "10000000.00"
243.      },
244.      {
245.        "id": 78,
246.        "pid": 1,
247.        "title": "七龙珠1",
248.        "money": "999.00"
249.      },
250.      {
251.        "id": 79,
252.        "pid": 2,
253.        "title": "测试",
254.        "money": "100.00"
255.      },
256.      {
257.        "id": 80,
258.        "pid": 1,
259.        "title": "测试一下",
260.        "money": "10000000.00"
261.      },
262.      {
263.        "id": 81,
264.        "pid": 0,
265.        "title": "我编辑了一下",
266.        "money": "123123.00"
267.      },
268.      {
269.        "id": 94,
270.        "pid": 81,
271.        "title": "我添加了一下",
272.        "money": "4567.00"
273.      },
274.      {
275.        "id": 97,
276.        "pid": 96,
277.        "title": "测试",
278.        "money": "0.00"
279.      },
280.      {
281.        "id": 101,
282.        "pid": 100,
283.        "title": "神奇",
284.        "money": "1.00"
285.      },
286.      {
287.        "id": 102,
288.        "pid": 101,
289.        "title": "神奇_yi",
290.        "money": "1.00"
291.      },
292.      {
293.        "id": 103,
294.        "pid": 102,
295.        "title": "神奇_er",
296.        "money": "1.00"
297.      },
298.      {
299.        "id": 104,
300.        "pid": 96,
301.        "title": "测试",
302.        "money": "0.00"
303.      },
304.      {
305.        "id": 109,
306.        "pid": 105,
307.        "title": "测试",
308.        "money": "1.00"
309.      },
310.      {
311.        "id": 111,
312.        "pid": 103,
313.        "title": "1",
314.        "money": "1.00"
315.      },
316.      {
317.        "id": 112,
318.        "pid": 111,
319.        "title": "11",
320.        "money": "11.00"
321.      },
322.      {
323.        "id": 113,
324.        "pid": 112,
325.        "title": "111",
326.        "money": "111.00"
327.      },
328.      {
329.        "id": 114,
330.        "pid": 113,
331.        "title": "1112",
332.        "money": "1112.00"
333.      },
334.      {
335.        "id": 115,
336.        "pid": 114,
337.        "title": "11122",
338.        "money": "11122.00"
339.      },
340.      {
341.        "id": 116,
342.        "pid": 103,
343.        "title": "1",
344.        "money": "1.00"
345.      },
346.      {
347.        "id": 117,
348.        "pid": 4,
349.        "title": "1",
350.        "money": "1.00"
351.      },
352.      {
353.        "id": 118,
354.        "pid": 4,
355.        "title": "1",
356.        "money": "1.00"
357.      },
358.      {
359.        "id": 119,
360.        "pid": 2,
361.        "title": "",
362.        "money": "0.00"
363.      },
364.      {
365.        "id": 120,
366.        "pid": 2,
367.        "title": "",
368.        "money": "0.00"
369.      },
370.      {
371.        "id": 121,
372.        "pid": 4,
373.        "title": "nihao",
374.        "money": "789.00"
375.      },
376.      {
377.        "id": 122,
378.        "pid": 94,
379.        "title": "纳尼?",
380.        "money": "1111.00"
381.      },
382.      {
383.        "id": 123,
384.        "pid": 122,
385.        "title": "测试1",
386.        "money": "1111.00"
387.      },
388.      {
389.        "id": 124,
390.        "pid": 123,
391.        "title": "???",
392.        "money": "1111.00"
393.      },
394.      {
395.        "id": 125,
396.        "pid": 124,
397.        "title": "嗯?",
398.        "money": "1111.00"
399.      },
400.      {
401.        "id": 126,
402.        "pid": 125,
403.        "title": "怎么回事?",
404.        "money": "1111.00"
405.      },
406.      {
407.        "id": 127,
408.        "pid": 94,
409.        "title": "纳尼?",
410.        "money": "1111.00"
411.      },
412.      {
413.        "id": 128,
414.        "pid": 124,
415.        "title": "嗯?",
416.        "money": "1111.00"
417.      },
418.      {
419.        "id": 129,
420.        "pid": 125,
421.        "title": "吆西",
422.        "money": "123.00"
423.      },
424.      {
425.        "id": 130,
426.        "pid": 125,
427.        "title": "吆西",
428.        "money": "123.00"
429.      },
430.      {
431.        "id": 131,
432.        "pid": 130,
433.        "title": "123",
434.        "money": "123.00"
435.      },
436.      {
437.        "id": 132,
438.        "pid": 130,
439.        "title": "123",
440.        "money": "123.00"
441.      }
442.    ]
js逻辑部分

首先将拿到的数据进行处理

1. //处理好的数据
2.     let res = getTree(temp,0,[]);
3.     console.log(res);//打印观察

先获取到所有的以及数据

1. //处理数据方法
2. function getTree(list,pid,data){
3. //获取所有一级
4. for(let item of list){
5. if(item.pid == pid){
6. data.push(item);
7.             }
8.         }
9. return data;
10.     }

获取二级及三级数据

1. //获取子级
2. for(let i of data){
3.             i.children = [];
4.             getTree(list,i.id,i.children);//递归调用
5. if(i.children.length == 0){
6. delete i.children;
7.             }
8.         }

逻辑综合代码

1. //处理好的数据
2.     let res = getTree(temp,0,[]);
3.     console.log(res);//打印观察
4. 
5. //处理数据方法
6. function getTree(list,pid,data){
7. //获取所有一级
8. for(let item of list){
9. if(item.pid == pid){
10. data.push(item);
11.             }
12.         }
13. //获取子级
14. for(let i of data){
15.             i.children = [];
16.             getTree(list,i.id,i.children);//递归调用
17. if(i.children.length == 0){
18. delete i.children;
19.             }
20.         }
21. 
22. return data;
23.     }

效果如下:

本篇博客结束谢谢观看,如有更好的意见请在评论区发出来讨论。


目录
打赏
0
0
0
0
295
分享
相关文章
对比Vue框架与React库的主要区别
在选择Vue还是React时,考虑项目的需求、团队的熟悉程度和个人偏好至关重要。如果项目需要快速原型开发和较小的学习曲线,Vue可能是更好的选择。相反,如果项目需要更大的灵活性,或者项目团队已经有React的经验,那么React可能是更合适的选择。
62 13
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
286 83
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
172 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
盘点原生JavaScript中直接触发事件的方式
本文全面探讨了原生JavaScript中触发事件的多种方式,包括`dispatchEvent`、`Event`构造函数、`CustomEvent`构造器、直接调用事件处理器以及过时的`createEvent`和`initEvent`方法。通过技术案例分析,如模拟点击事件、派发自定义数据加载事件和实现提示框系统,帮助开发者掌握这些方法在实际开发中的应用,提升灵活性与兼容性。
142 3
如何优化React或Vue应用的性能
需要注意的是,性能优化是一个持续的过程,需要根据具体的应用场景和性能问题进行针对性的优化。同时,不同的项目和团队可能有不同的优化重点和方法,要结合实际情况灵活运用这些优化策略,以达到最佳的性能效果。
298 61
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
221 1
JavaScript专题之递归
JavaScript 专题系列第十八篇,讲解递归和尾递归
159 0
JavaScript专题之递归
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
215 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问