拆分指定长度的二维数组

Split a two-dimensional array of specified length

将原数组拆分为指定长度的二维数组

list => source array

columns => columns number

targetList => two-dimensional array

const list = [1,2,3,4,5,6,7,8,9,10]
const columns = 4;
const targetList = [ [1,2,3], [4,5,6], [7,8,9], [10] ];

const columns = 5;
const targetList = [ [1,2], [3,4], [5,6], [7,8], [9,10] ];

const columns = 6;
const targetList = [ [1,2], [3,4], [5,6], [7,8], [9], [10] ];
const list = [1,2,3,4,5,6]
const columns = 4;
const targetList = [ [1,2], [3,4], [5], [6] ];
const list = [1,2,3,4]
const columns = 5;
const targetList = [ [1], [2], [3], [4] ];

您可以使用 Array.prototype.reduce 并将给定的 list 转换为所需的网格。

如果满足以下任何条件,则将新行推送到结果网格:

  1. 如果当前没有行。
  2. 如果最后一行已满,即无法向最后一行添加更多列,则添加包含当前项目的新行。
  3. 如果剩余要推送的项目等于剩余要创建的行。

const transform = (list, rows) =>
  list.reduce((t, l, i) => {
    if (
      !t.length ||
      t.at(-1).length >= Math.ceil(list.length / rows) ||
      list.length - i === rows - t.length
    ) {
      t.push([]);
    }
    t.at(-1).push(l);
    return t;
  }, []);

console.log(transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 4));
console.log(transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 5));
console.log(transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 6));
console.log(transform([1, 2, 3, 4, 5, 6], 4));
console.log(transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 4));
console.log(transform([1, 2, 3, 4], 5));

其他相关文件: