首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数组分割成偶数长度块?

如何将数组分割成偶数长度块?
EN

Stack Overflow用户
提问于 2019-07-05 14:17:42
回答 3查看 1K关注 0票数 1

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

代码语言:javascript
复制
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]

如果将其放入下面的函数中,以5作为块大小,则会产生以下结果

代码语言:javascript
复制
[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17]

然而,我希望结果是

代码语言:javascript
复制
[[1,2,3,4,5],[6,7,8,9],[10,11,12,13],[14,15,16,17]

这意味着牺牲数组之前的长度,使它们只相差一个长度。

我目前使用的函数如下所述。我用模试过很多东西,但我搞不懂。

代码语言:javascript
复制
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;

}

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-05 14:35:49

使用此解决方案,您将得到均匀分割的数组项,直到最后一个项合并了所有遗留项(长度小于块大小的项的集合)。

代码语言:javascript
复制
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)
)

票数 1
EN

Stack Overflow用户

发布于 2019-07-05 14:24:08

如果数组长度是奇数,则可以使用模块进行检查:

代码语言:javascript
复制
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]

希望能帮上忙。

票数 -1
EN

Stack Overflow用户

发布于 2019-07-05 14:24:22

我的解决方案!

代码语言:javascript
复制
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]]
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56904812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档