循环多个数组,合并为单个数组,维护子数组内的索引

Tom*_*yBs 6 javascript arrays

标题有点冗长,但我会尽力解释我想做什么。基本上我有很多数组想要组合成一个数组。问题是,我需要循环子数组中的项目并一次添加 1 项并保持顺序。最终目标是我想显示分页的数据。下面我有一个简单的例子,我将用它来尝试表达我的意思。这不是按字母顺序排序,即在底部示例中h不应该在i之前。

所以在我的例子中,我知道我想要 3 页的结果。第一页应该有 4 个项目,第二页有 4 个项目,第三页只有 1 个项目。

我可以自己进行最后的分页,因为我将在其“ mix ”末尾有一个包含所有内部项目的数组,但我无法弄清楚如何循环遍历我的数组并按照我需要的方式添加它们。

我已经预先获得了页面变量,但我不确定如何构建循环。我想我基本上需要循环遍历每个子数组并 pop() 第一项,然后循环下一个,pop() 第一项,依此类推。但在某个地方我需要检查每个子数组中还剩下多少项。

例如,如果我只有数组“one”,理论上我会有 2 页,第一个包含 a、c、e、i,第二个仅包含 k,这显然很简单,因为我只检查唯一数组的长度。

但是如果我在另一个数组“third”[1,2,3,4,5]中添加,那么我期望混合数组为['a','b',1,'c','d',2 ...ETC]; 理论上,每个数组都可以有不同的长度,所以我显然会跳过一个空值。

 var one = ['a','c','e','i','k'];
 var two = ['b','d','f','h'];

 var all = [one,two];
 var pagecount = 3;
 var mix = [];

 for(var i = 0; i< all.length; i++){
     var area = all[i];    
 }
 // End result should be mix = ['a','b','c','d','e','f','i','h','k'];
Run Code Online (Sandbox Code Playgroud)

我已经尽力用最好的语言来表达这一点,但我正在努力思考如何自己解释这一点!不幸的是,在现实世界中,我无法控制数据数组的数据/大小。

如有任何疑问或不清楚的地方,请发表评论。

And*_*ark 3

以下应该有效:

for (var i = 0; all.length !== 0; i++) {
    var j = 0;
    while (j < all.length) {
        if (i >= all[j].length) {
            all.splice(j, 1);
        } else {
            mix.push(all[j][i]);
            j += 1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在外循环的每次迭代中,我们都会加i一,这将是每个数组中要从中获取项目的索引。对于内循环,我们将执行以下操作之一:

  • 如果索引i超出了数组的最大索引,all[j]我们就完成了该数组,因此使用 删除它all.splice(j, 1)。我们不前进,j因为all[j]在该位置的前一个元素被删除后,将引用下一个数组。
  • 否则,我们将项目添加all[j][i]mix并加j一以在下一次迭代中移动到下一个数组。

直到 中没有剩余数组时,外部循环才会停止,这会在超过最长数组的长度all时发生。i

例如,三个数组的长度都不同:

var one = [1, 2, 3, 4];
var two = ['a', 'b'];
var three = ['U', 'V', 'W', 'X', 'Y', 'Z'];
var all = [one, two, three];
var mix = [];
// after running the above loop mix will have the following contents:
// [1, "a", "U", 2, "b", "V", 3, "W", 4, "X", "Y", "Z"]
Run Code Online (Sandbox Code Playgroud)