itRef.cn技术参考网站

当前位置: 主页 > JS >

javascript树形数组转换实例

时间:2012-03-19 09:44来源:未知 作者:wiwi 点击:
问题背景: 需要将多维数组转换为一维数组的格式。输入的格式如下: [ [ A , B , C ], [ 1 , 2 ], [ a , b , c , d ] ] 转换后的格式为: [ A/1/a , A/1/b , A/1/c , A/1/d , A/2/a , A/2/b , A/2/c , A/2/d , B/1/a , B/1/b , B/1/c , B/1/d , B/2/a , B/2/

问题背景:

 

需要将多维数组转换为一维数组的格式。输入的格式如下: 

  1.     ["A""B""C"], 
  2.     ["1""2"], 
  3.     ["a""b""c""d"

转换后的格式为:

  1.     "A/1/a""A/1/b""A/1/c""A/1/d"
  2.     "A/2/a""A/2/b""A/2/c""A/2/d"
  3.     "B/1/a""B/1/b""B/1/c""B/1/d"
  4.     "B/2/a""B/2/b""B/2/c""B/2/d"
  5.     "C/1/a""C/1/b""C/1/c""C/1/d"
  6.     "C/2/a""C/2/b""C/2/c""C/2/d" 

解决方法:

使用递归方法转换输出。数组.slice(start, end) 是返回数组中索引从start开始到end之间的元素组成的数组。如果end缺省则返回start到结尾的元素;如果start为负数,则从倒数的元素开始,如-1就是倒数第一个开始。

  1. function traverse(arr) { 
  2.     var first = arr[0]; 
  3.     var ret = []; 
  4.     if(arr.length == 1) { 
  5.         for(var i = 0; i < first.length; i++) { 
  6.             ret.push(first[i]); 
  7.         } 
  8.     } else { 
  9.         for(var i = 0; i < first.length; i++) { 
  10.             var inn = traverse(arr.slice(1)); 
  11.             for(var j = 0; j < inn.length; j++) { 
  12.                 ret.push(first[i] + '/' + inn[j]); 
  13.             }                 
  14.         } 
  15.     } 
  16.     return ret; 
  17.  
  18. var inp = 
  19.     ["A""B""C"], 
  20.     ["1""2"], 
  21.     ["a""b""c""d"
  22. ]; 
  23.  
  24. var out = traverse(inp); 

(责任编辑:wiwi) 转载请注明 来源于itRef.cn技术参考网站:
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容