我希望将数组拆分为偶数(或尽可能多的)块。函数的输入应该是数组和块的大小。假设你有数组
[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;}
发布于 2019-07-05 14:35:49
使用此解决方案,您将得到均匀分割的数组项,直到最后一个项合并了所有遗留项(长度小于块大小的项的集合)。
const a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
const chunk = 4
const chunk_array = (a, c) => {
let arr = []
a.forEach((_, i) => {
if (i%chunk === 0) arr.push(a.slice(i, i+chunk))
})
const [left_overs] = arr.filter(a => a.length < chunk)
arr = arr.filter(a => a.length >= chunk)
arr[arr.length-1] = [...arr[arr.length-1], ...left_overs]
return arr
}
console.log(
chunk_array(a, chunk)
)
发布于 2019-07-05 14:24:08
如果数组长度是奇数,则可以使用模块进行检查:
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]希望能帮上忙。
发布于 2019-07-05 14:24:22
我的解决方案!
const chunk = (arr, chunkSize) => {
let chunked = [];
for (let i = 0; i< arr.length; i+=chunkSize){
chunked.push(
arr.slice(i, (i + chunkSize))
);
}
return chunked;
};
const data = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17];
console.log(chunk(data, 5));
// returns [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17]]https://stackoverflow.com/questions/56904812
复制相似问题