【问题标题】:How to split an array into a 2d array depending on dynamic chunks [duplicate]如何根据动态块将数组拆分为二维数组[重复]
【发布时间】:2017-04-17 15:28:41
【问题描述】:

我正在尝试构建一个机场风格的航站楼到达/出发表视图。试图根据可视窗口使行可视化。 我有一个可以有任意行数的数组。每行本身就是一个数组。我正在尝试根据视图可以支持的表行数将数组中的行分成块。

所以我的问题是我不确定如何根据我希望块所在的动态大小正确地将其分成块。我尝试过切片和拼接,但它只会添加到 @ 中的第一个元素987654321@ 那么剩下的元素都是空的。

输入数据:

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

输出数据:

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

【问题讨论】:

  • 请添加一些数据和想要的输出。
  • 在内循环中添加一个break if(b+a*maxRowsPerTableView>=longArray.length) break mainforloop;
  • const toGroupsOf = (n, array) =&gt; Array.from({ length: Math.ceil(array.length / n) }, (v,i) =&gt; array.slice(i*n, (i+1)*n)); 然后var shortArrays = toGroupsOf(10, jsonData);

标签: javascript jquery


【解决方案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);
} 

【讨论】:

  • 感谢您的建议和快速响应
猜你喜欢
  • 1970-01-01
  • 2022-07-06
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多