Javascript 如何将数组拆分为等长的块?

Javascript 如何将数组拆分为等长的块?,javascript,arrays,Javascript,Arrays,我想将数组分成偶数(或尽可能偶数)块。 函数的输入应该是数组和块的大小。 假设你有数组 [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] 如果将其放入下面的函数中,块大小为5,则会产生以下结果 [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17] 然而,我希望结果是 [[1,2,3,4,5],[6,7,8,9],[10,11,12,13],[14,15,16,17] 这意味着牺牲阵列的长度,使它们在长度上

我想将数组分成偶数(或尽可能偶数)块。 函数的输入应该是数组和块的大小。 假设你有数组

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
如果将其放入下面的函数中,块大小为5,则会产生以下结果

[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17]
然而,我希望结果是

[[1,2,3,4,5],[6,7,8,9],[10,11,12,13],[14,15,16,17]
这意味着牺牲阵列的长度,使它们在长度上只相差一个

我目前使用的函数如下所述。我用模做过各种各样的尝试,但我搞不懂

function chunkArray(myArray, chunkSize){
var arrayLength = myArray.length;
var tempArray = [];

for (index = 0; index < arrayLength; index += chunkSize) {
    myChunk = myArray.slice(index, index+chunkSize);
    // Do something if you want with the group
    tempArray.push(myChunk);
}

return tempArray;
函数chunkArray(myArray,chunkSize){
var arrayllength=myArray.length;
var tempArray=[];
对于(索引=0;索引

}

如果数组长度为奇数,可以使用模来检查:

let MY_CHUNK_CONST = 5
let first_chunk_size = MY_CHUNK_CONST,
other_chunk_size = MY_CHUNK_CONST;
let myArray = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17];
modulo_res = myArray.length % 2; // 0 if even 1 if odd

if(modulo_res){
 other_chunk_size = first_chunk_size - 1;
}

var tempArray = [];

myChunk = myArray.slice(0, 0+first_chunk_size);
tempArray.push(myChunk);
for (index = 1; index < myArray.length; index += other_chunk_size) {
    myChunk = myArray.slice(index, index+other_chunk_size);
    // Do something if you want with the group
    tempArray.push(myChunk);
}

console.log(tempArray)
// [[1,2,3,4,5],[6,7,8,9],[10,11,12,13],[14,15,16,17]

让我的\u CHUNK\u CONST=5
让first_chunk_size=MY_chunk_CONST,
其他块大小=我的块大小;
设myArray=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17];
模_res=myArray.length%2;//0如果偶数1如果奇数
if(模_-res){
其他块大小=第一块大小-1;
}
var tempArray=[];
myChunk=myArray.slice(0,0+第一块块大小);
tempArray.push(myChunk);
对于(索引=1;索引
希望有帮助。

我的解决方案

const chunk=(arr,chunkSize)=>{
设chunked=[];
for(设i=0;i
使用此解决方案,您可以平均分割数组项,直到最后一个包含任何剩余项的项(长度小于块大小的项集合)

const a=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
常量块=4
常量块数组=(a,c)=>{
设arr=[]
a、 forEach((u,i)=>{
如果(i%chunk==0)arr.push(a.slice(i,i+chunk))
})
const[left_overs]=arr.filter(a=>a.lengtha.length>=chunk)
arr[arr.length-1]=[…arr[arr.length-1],…剩余部分]
返回arr
}
console.log(
块\数组(a,块)

)
为什么第二个数据块的长度是4?其背后的规则是什么?没有明确的基础来获得输出。是吗?如果最后一个数组只剩下2个元素,会出现什么样的序列或顺序?请提供“并非所有数据块的大小都相同”的可能场景OP中的5只是一个示例数字,他不想生成5个区块。OP想基于数组大小创建相等数量的区块。是的,这就是为什么我使用5。然后他可以决定他想输入的值。OP中的5只是一个示例数字,他不想生成5个区块。OP想基于数组大小创建相等数量的区块。再来一个要添加的大小写应该是如果块的数量超过数组长度的1/2怎么办好主意,如果它大于原始长度的1/2,我们只需保留
剩余的
数组本身就可以了?@RinorDreshajwell我想如果剩余的大小小于数组中实际块大小的1/2,但在这种情况下,如果块大小是10,我们可以有两个数组,一个大小为10,另一个大小为7,但是如果大小像15,我认为你应该坚持使用一个数组,而不是创建另一个大小为2的数组。我以后必须这样做。必须走了!请随意编辑:-)做得好