如何根据动态块将数组拆分为2d数组

时间:2017-04-17 15:28:41

标签: javascript jquery

我正在尝试建立一个机场式终端到达/离开表视图。尝试根据可视窗口使行可查看动态。 我有一个可以有任意行数的数组。每行都是一个数组。我试图将数组中的行分解为块,具体取决于视图可以支持的表行数。

所以我的问题是我不确定如何根据我想要块的动态大小将其分解成块。我已经尝试过切片和拼接但它只是添加到第一个shortArrays中的元素然后其余元素都是空的。

收到数据:

array([array1], [array2], [array3], [array4], [array5], [array6], [array7], [array8], [array9], [array10], [array11], [array12], [array13]), [array14]), [array15]))

OUTGOING DATA:

array([[array1], [array2], [array3], [array4], [array5], [array6],  [array7], [array8], [array9], [array10]], [[array11], [array12], [array13], [array14], [array15]])  // 2 rows, row1: 10 arrays, row2: 5 arrays
var jsonData = JSON.parse(data); // data is value returned from ajax
var maxRowsPerTableView = 10; // Hardcoded as an example
var totalTablesToMake = 2; // Hardcoded as an example
var longArray = jsonData;
var shortArrays = [];
var tempCount, doorCount = 0; // Keeps track of which index

for(a = 0; a < totalTablesToMake; a++)
{
    temp = [];

    for(b = 0; b < maxRowsPerTableView; b++)
    {
        temp.push(longArray[b + doorCount]);
        tempCount = b;
    }

    doorCount += tempCount;
    shortArrays.push(temp);
}

结果:

shortArrays([10 elements],[10 elements]) // This isn't actual output, just a visual description so you can see what results I get.

此当前代码将输出:shortArrays,包含2行,每行包含10个元素。所以,让我们说jsonData中只有15个元素。 shortArrays中的第二行仍有10个元素,但最后5个元素将为undefined

1 个答案:

答案 0 :(得分:1)

longArray[b + doorCount] 
如果超出数组边界,

将返回undefined。所以你要么填写其他的(例如数组)

longArray[b + doorCount]||[];

或者你停止循环:

mainloop:for(a = 0; a < totalTablesToMake; a++)
{
temp = [];

for(b = 0; b < maxRowsPerTableView; b++)
{
   if(b+a*maxRowsPerTableView>=longArray.length) break mainloop; 
    temp.push(longArray[b + doorCount]);
    tempCount = b;
}

doorCount += tempCount;
shortArrays.push(temp);
}