You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将数组转换为指定顺序,以实现按3元素分块处理?

如何将数组按3元素分块后按列提取重组

我完全明白你的需求——就是把原数组按每3个元素分成块,然后像读表格列一样把每一列的元素依次拿出来拼合成新数组,对吧?不管你是处理整数数组还是对象数组,这个逻辑都是通用的,下面给你两种实用的实现方式,你可以根据项目情况选择:

方法一:原生JavaScript实现(无依赖)

这个方法不需要任何第三方库,纯原生JS就能搞定,核心是通过计算索引来按列取元素:

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
const chunkSize = 3;

// 计算需要分成多少块(向上取整,处理最后一块不足3个元素的情况)
const totalChunks = Math.ceil(arr.length / chunkSize);
const newArr = [];

// 遍历每一列(0、1、2,对应每块的第1、2、3个元素)
for (let colIndex = 0; colIndex < chunkSize; colIndex++) {
  // 遍历每一块,取出当前列的元素
  for (let chunkIndex = 0; chunkIndex < totalChunks; chunkIndex++) {
    const originalIndex = chunkIndex * chunkSize + colIndex;
    // 确保索引不越界(最后一块可能没有当前列的元素)
    if (originalIndex < arr.length) {
      newArr.push(arr[originalIndex]);
    }
  }
}

console.log(newArr); // 输出:[1, 4, 7, 10, 13, 2, 5, 8, 11, 3, 6, 9, 12]

逻辑说明:

  • 先算出原数组能分成多少块,比如13个元素按3个分,会分成5块(前4块3个,最后1块1个)
  • 然后按列遍历:先取所有块的第0个元素(1、4、7、10、13),再取所有块的第1个元素(2、5、8、11),最后取所有块的第2个元素(3、6、9、12)
  • 处理对象数组时,直接push原数组的对象即可,逻辑完全一致

方法二:结合Lodash实现(简化代码)

如果你项目里已经在用Lodash,可以用它的工具函数快速实现,代码更简洁:

const _ = require('lodash');
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];

// 第一步:把原数组按3个元素分块
const chunkedArr = _.chunk(arr, 3);
// 第二步:转置二维数组(把行和列交换)
const transposedArr = _.zip(...chunkedArr);
// 第三步:把转置后的二维数组扁平化
const newArr = _.flatten(transposedArr);

console.log(newArr); // 同样输出目标数组

逻辑说明:

  • _.chunk(arr, 3)会把原数组分成[[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13]]
  • _.zip(...chunkedArr)会转置这个二维数组,得到[[1,4,7,10,13],[2,5,8,11],[3,6,9,12]]
  • _.flatten把转置后的数组拼平成一维数组,就是你要的最终顺序
  • 同样,处理对象数组时不需要修改任何代码,直接复用即可

内容的提问来源于stack exchange,提问作者senty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:59:16