2015-11-02 46 views
0

你好,stackoverflow成员。当维数是可变的时,如何处理多维数组?

我提供了下列问题:

首先我们有

var myArray = [[array1],[array2],[array3],[arrayN],...]; 

其中每个数组充满了已知数量的字符串,如

var array1 = ["a","b"], array2 = ["1","2"], array3=["&","é"];.... 

等。

我正在寻找一种方法来得到这样的结果:

expected result ===> a1&;a1é;a2&;a2é;b1&;b1é;b2&;b2é; .... 

如果维度的数量是固定的,我可以用for循环迭代和建设的结果,但这里的问题是,我想为了能够在主数组myArray中输入N个数组,并且通过这样做,我改变了嵌套循环的深度。

如果不是你有什么想法让我走上这个解决方案的轨道?

谢谢!

编辑通过这个办法是我尝试:

for (i=0; i<myArray[0].length; i++){ 
    for (var j =0; j<myArray[1].length; i++){ 
     for(var k = 0; k<myArray[2].length; k++{ 
      console.log(i+j+k); 
     } 
    } 
} 

BTW我不能找到一种方式来描述一个函数,它会为循环嵌套N,其中N是myArray.length + 1(数myArray中的数组)。

编辑:我发现这样做的一个迭代的方式,并希望分享的解决方案:JSFiddle

+0

_“有库quicly实现这一目标?” _问图书馆的建议是对堆栈溢出专门offtopic - 您可能想要重述您的问题的部分内容,也许还包括您自己迄今为止尝试解决此问题的任何研究/代码。 –

+0

对不起这个问题到底是什么?无论你有多少个嵌套数组,你都可以很容易地循环遍历它们,因为它们都有一个'length'属性,而且都不知道长度。它只是将内容附加到全局字符串并完成。 – somethinghere

+0

所以你循环阵列....不知道什么是硬 – epascarello

回答

1

要获得所有细胞的平面列表,类似下面的递归函数应该工作(如果你有一个非阵列的空数组,并且所有数组项都是字符串):

function makeFlatList(inputArray) { 
    if (inputArray.length == 1) {       // if this array has only one array inside 
    return inputArray[0];        // return the array inside 
    } else { 
    var outArr = []; 
    var arrayShifted = inputArray.slice(1);    // remove first subarray from inputarray 
    var arrayShiftedFlat = makeFlatList(arrayShifted); // recursive call 
    for (var i=0; i<inputArray[0].length ; i++) {  // loop over first array 
     for (var j=0; j<arrayShiftedFlat.length; j++) { 
     outArr.push(inputArray[0][i]+arrayShiftedFlat[j]); // add items to outArr 
     } 
    } 
    return outArr; 
    } 
} 

工作JSBin here

+0

把它变成一个可操作的SO片断,看看它是否符合锡上的说法,这是一个很好的答案。 – somethinghere

+0

在代码中修复了错字;)+添加了链接到工作JSBin – wintvelt

+0

这完全是我一直在寻找的,真是太棒了!谢谢你的帮助!今晚我会深入研究它,以便更好地理解它,如果我找到了一个迭代的方法,我也会提供它。 非常感谢! 顺便说一句,它应该是一个微不足道的问题? – sp3