免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3275 | 回复: 4
打印 上一主题 下一主题

[数组] JS中二维数组的递归问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-28 15:45 |只看该作者 |倒序浏览
我想用递归把下面的奥迪的所有车型用树状结构表示出来。
下面是代码,为什么运行以后的结果是这样子:
********************************************
--A4
----04款
*********************************************
只能显示很少的一部分车型,不能全部显示呢?



我想要的结果是
********************************************
--A4
----04款
----03款
----05款
--A6
----04款
--新A4
--新A6
*********************************************
代码是错在哪里呢?

  1. <script language="javascript">
  2. var allType = new Array();
  3. //数组的格式说明
  4. //*********************************************************************

  5. //alltype[] = new Array("自身ID" ,"父ID" , "自身名字" , "伸缩排版符");

  6. //*******************************************************************

  7. //奥迪的所有品牌
  8. allType[0] = new Array(        "3", "2", "A4", "--");
  9. allType[1] = new Array(        "4", "2", "A6", "--" );
  10. allType[2] = new Array(        "5", "2", "新A4", "--");
  11. allType[3] = new Array(        "6","2", "新A6", "--");
  12. //奥迪A4的型号
  13. allType[4] = new Array(        "7", "3",         "04款", "----");
  14. allType[5] = new Array(        "8", "3",         "03款", "----");
  15. allType[6] = new Array(        "9", "3",         "05款", "----");
  16. //奥迪A6的型号
  17. allType[7] = new Array(        "10", "4",         "04款", "----");


  18. typeNO = allType.length;
  19. tree = "";
  20. function getTree( PID )
  21. {
  22.         for (i = 0 ;i < typeNO ; i++)
  23.         {
  24.                 if (allType[i][1] == PID )
  25.                 {
  26.                         tree += "<div>";
  27.                         tree += allType[i][3];
  28.                         tree += allType[i][2];
  29.                         tree += "</div>";
  30.                         getTree( allType[i][0] );
  31.                 }
  32.         }
  33.         return tree;
  34. }

  35. document.write( getTree( 2 ) );


  36. </script>
复制代码

[ 本帖最后由 HonestQiao 于 2005-12-29 12:14 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2005-12-28 17:14 |只看该作者
建议你不要加什么伸缩版符,没有必要,在递归里实现就行了。
  1. tag?tag += "->":tag = "|-->";
复制代码

这个显示的并不好,如果要应用,要分一下情况才行。

[ 本帖最后由 韩三普 于 2005-12-29 13:38 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
3 [报告]
发表于 2005-12-29 12:15 |只看该作者
你先少用几个值,然后每一步都alert看看是否正确

论坛徽章:
0
4 [报告]
发表于 2005-12-29 12:51 |只看该作者
在CSDN里兄弟的帮助,找到正确答案了。问题主要出在使用了全局变量tree,而tree应该作为递归函数中的局部变量,递归有稍许问题,改动了两处能够显示结果,下面是改了后的文件清单:

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/html4/loose.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. <title>无标题文档</title>
  7. </head>
  8. <script language="javascript">
  9. var allType = new Array();
  10. //数组的格式说明
  11. //*********************************************************************

  12. //alltype[] = new Array("自身ID" ,"父ID" , "自身名字" , "伸缩排版符");

  13. //*******************************************************************

  14. //奥迪的所有品牌
  15. allType[0] = new Array( "3", "2", "A4", "--");
  16. allType[1] = new Array( "4", "2", "A6", "--" );
  17. allType[2] = new Array( "5", "2", "新A4", "--");
  18. allType[3] = new Array( "6","2", "新A6", "--");
  19. //奥迪A4的型号
  20. allType[4] = new Array( "7", "3", "04款", "----");
  21. allType[5] = new Array( "8", "3", "03款", "----");
  22. allType[6] = new Array( "9", "3", "05款", "----");
  23. //奥迪A6的型号
  24. allType[7] = new Array( "10", "4", "04款", "----");


  25. typeNO = allType.length;
  26. //var tree = "";

  27. function getTree( PID )
  28. {
  29. var tree="";
  30. var i;
  31. for (i = 0 ;i < typeNO ; i++)
  32. {
  33. if (allType[i][1] == PID )
  34. {
  35. tree += "<div>";
  36. tree += allType[i][3];
  37. tree += allType[i][2];
  38. tree += "</div>";
  39. tree+=getTree( allType[i][0] );
  40. }
  41. }
  42. return tree;
  43. }

  44. document.write( getTree( 2 ) );


  45. </script>

  46. <body>
  47. </body>
  48. </html>
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-12-29 13:16 |只看该作者
没有用你的伸缩版符

  1. <script language="javascript">
  2. var allType = new Array();
  3. //数组的格式说明
  4. //*********************************************************************

  5. //alltype[] = new Array("自身ID" ,"父ID" , "自身名字" , "伸缩排版符");

  6. //*******************************************************************

  7. //奥迪的所有品牌
  8. allType[0] = new Array(        "3", "2", "A4", "--");
  9. allType[1] = new Array(        "4", "2", "A6", "--" );
  10. allType[2] = new Array(        "5", "2", "新A4", "--");
  11. allType[3] = new Array(        "6","2", "新A6", "--");
  12. //奥迪A4的型号
  13. allType[4] = new Array(        "7", "3",         "04款", "----");
  14. allType[5] = new Array(        "8", "3",         "03款", "----");
  15. allType[6] = new Array(        "9", "3",         "05款", "----");
  16. //奥迪A6的型号
  17. allType[7] = new Array(        "10", "4",         "04款", "----");

  18. var typeNO = allType.length;
  19. function getTree(PID, tag)
  20. {
  21.         tag?tag += "->":tag = "|-->";
  22.         var tree = "";
  23.         for (var i = 0; i < typeNO; i++)
  24.         {
  25.                 if (PID == allType[i][1])
  26.                 {
  27.                         tree += "<div>";
  28.                         tree += tag;
  29.                         tree += allType[i][2];
  30.                         tree += "</div>";
  31.                         tree+=getTree(allType[i][0],tag);
  32.                 }
  33.         }
  34.         return tree;
  35. }
  36. document.write(getTree(2, "|-"));
  37. </script>
复制代码

[ 本帖最后由 韩三普 于 2005-12-29 16:34 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP