2012-04-26 163 views
1

想象一下,我有一个函数multi0(Array),我希望它将一个数组作为参数。函数返回0的多维数组

如果我这样做multi0([5]),它会返回一个数组,看起来像

[0,0,0,0,0] 

如果我这样做multi0([5,3]),它会返回一个数组,看起来像

[ 
    [0,0,0], 
    [0,0,0], 
    [0,0,0], 
    [0,0,0], 
    [0,0,0] 
] 

我尝试这个递归,但它不起作用。你如何实现这个?

+1

请包括您试过的代码,以便我们可以告诉您它出了什么问题。 – 2012-04-26 19:45:09

回答

5

像这样:

function multi0(arr) { 
    if (arr.length == 0) { 
    return 0; 
    } else { 
    var children = arr.slice(1); 
    var result = []; 
    for (var i = 0; i < arr[0]; i++) { 
     result.push(multi0(children)); 
    } 
    return result; 
    } 
} 

http://jsfiddle.net/ffuH4/

或者稍长,但更有效的:

function multi0(arr) { 
    var result = []; 
    if (arr.length == 1) { 
    for (var i = 0; i < arr[0]; i++) { 
     result.push(0); 
    } 
    } else { 
    var children = arr.slice(1); 
    for (var i = 0; i < arr[0]; i++) { 
     result.push(multi0(children)); 
    } 
    } 
    return result; 
} 
0

试试这个:

function multi0(a,b) { 
    x = new Array; 
    for(var i=0;i<a;i++) { 
     x[i] = new Array; 
     for(var s=0;s<b;s++) { 
      x[i][s] = 0; 
     } 
    } 
    return x; 
} 

看看这里fiddle