Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:将数组拆分为多个部分_Javascript_Arrays - Fatal编程技术网

Javascript:将数组拆分为多个部分

Javascript:将数组拆分为多个部分,javascript,arrays,Javascript,Arrays,我有一个可以是任意长度的数组。需要把它分成几个部分。第一段长度为14,第二段长度为16 var size1 = 14; var size2 = 16; var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]; var a

我有一个可以是任意长度的数组。需要把它分成几个部分。第一段长度为14,第二段长度为16

var size1 = 14;
var size2 = 16;
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
        22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40];
var arrays = [];
if (a.length > 14){
    for (i = 0; i < 14; i++) {
        arrays.push(a.splice(0, size1));
    } 
    for (i = 14 ; i < a.length; i++){
        arrays.push(a.splice(0, size2));

    }
} else {
    arrays.push(a.splice(0, size1));

}
console.log(arrays);
然而,根据我所做的,我的数组只在14处分裂。你能给我一些建议吗

感谢使用Array.prototype.slice函数的解决方案:

变量a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], 尺寸1=14, 尺寸2=16, 数组=[]; [0,大小1,大小2]。forEachfunction v,i,arr{ 数组.pusharr[i+1]?a.slicev,v+arr[i+1]:a.slicearr[i-1]+v; };
console.logarray 编辑:那么,像这样吗

var size1 = 14;
var size2 = 16;
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40];

var head = a.slice(0, size1);
var arrays = [head];
while (size1 < a.length){
    arrays.push(a.slice(size1, Math.min(size1+size2, a.length)));
    size1 += size2;
}

console.log(arrays)

您可以尝试使用所有动态数组大小,它将获得所需的输出。 希望您正在寻找此解决方案

var size1 = 14;
var size2 = 16;
var flag=0;
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
                22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40];
var arrays = [];
var t=a.length/14;
while(a.length>0){
        if (flag==0 && a.length > 14){
                arrays.push(a.splice(0, size1));
                flag=1;
        } else if(a.length>=16){
            arrays.push(a.splice(0, size2));
        }
        else{
            arrays.push(a.splice(0, a.length));
        }
}
        console.log(arrays)

您可以使用数组表示块长度,使用零表示其余部分,并通过保持以前长度的长度来映射块

它适用于任意数量的块

var chunks=[14,16,0], 数组=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40], 结果=chunks.maplast=>a=>array.slicelast,a?最后+=a:未定义0; console.logresult;
.作为控制台包装器{max height:100%!important;top:0;}您的答案似乎不是原创的。你不觉得吗?是的,这给了我答案。。谢谢你,我真的很感谢所有在这方面指导我的人。你好,罗曼,谢谢你的帮助。但我的数组停在2,即14,16。。其余的数字需要进入下一个数组部分。你能建议我如何自动化吗?你的意思是:固定长度的前两个块和最后一个块应该包含所有剩余的项目?所以应该是14、16、16、16、16、16…等等。。。第一部分的长度为14,第二部分的长度应为16。不清楚,您能否展示整个最终数组的外观?请原谅我不清楚,因此在我的示例中,数组a的数字最多为40。所以它应该是数组[0]=1,2,3,4,5,6,7,8,9,10,11,12,13,14;数组[1]=15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30;数组[2]=31,32,33,34,35,36,37,38,39,40。如果有更多的数字,它将继续在16节中添加。目前,由于我们正在执行arrays.pusha.slice0、size1和arrays.pushsize1、size1+size2,它将停止在arrays[2]