JS 将数组拆分为 X 块,然后是 Y 块,依此类推

我究竟如何将数组拆分为 6 个块,然后是 3 个块,然后是 6 个块,然后是 3 个块等等?


所以说我有这个数据集:


const datasaet = [

  { text: 'hi1' },

  { text: 'hi2' },

  { text: 'hi3' },

  { text: 'hi4' },

  { text: 'hi5' },

  { text: 'hi6' },

  { text: 'hi7' },

  { text: 'hi8' },

  { text: 'hi9' },

  { text: 'hi10' },

  { text: 'hi11' },

  { text: 'hi12' },

  { text: 'hi13' },

  { text: 'hi14' },

  { text: 'hi15' },

  { text: 'hi16' },

]

我需要将它拆分成这样的数组:


const expected = [

  [

    { text: 'hi1' },

    { text: 'hi2' },

    { text: 'hi3' },

    { text: 'hi4' },

    { text: 'hi5' },

    { text: 'hi6' },

  ],

  [

    { text: 'hi7' },

    { text: 'hi8' },

    { text: 'hi9' },

  ],

  [

    { text: 'hi10' },

    { text: 'hi11' },

    { text: 'hi12' },

    { text: 'hi13' },

    { text: 'hi14' },

    { text: 'hi15' },

    { text: 'hi16' },

  ]

]

本质上,我正在做的是将数组拆分为 6 块(如果是事件)和 3 块(如果是奇数)。


但是我不知道如何去做。我目前的尝试看起来像这样,我可以完美地将它分成 6 块,但是我该如何做接下来的 3 块,然后是接下来的 6 块,依此类推:


const grouped = datasaet.reduce(

  (initital: any[], current, index, items) => {

    const isFirstOfSix = index % 6 === 0

    if (isFirstOfSix) {

      const nextSix = items.slice(index, index + 6)

      initital.push(nextSix)

    }


    return initital

  },

  []


回首忆惘然
浏览 111回答 2
2回答

阿晨1998

您可能会考虑创建数组的副本(以避免改变原始数组),然后拼接项目直到它为空,检查并切换指示是否在当前迭代中删除 6 或 3 个项目的布尔值:const datasaet = [  { text: 'hi1' },  { text: 'hi2' },  { text: 'hi3' },  { text: 'hi4' },  { text: 'hi5' },  { text: 'hi6' },  { text: 'hi7' },  { text: 'hi8' },  { text: 'hi9' },  { text: 'hi10' },  { text: 'hi11' },  { text: 'hi12' },  { text: 'hi13' },  { text: 'hi14' },  { text: 'hi15' },  { text: 'hi16' },]const tempArr = datasaet.slice();const output = [];let removeSix = true;while (tempArr.length) {  output.push(tempArr.splice(0, removeSix ? 6 : 3));  removeSix = !removeSix;}console.log(output);

慕的地8271018

您可以创建一个接受数组和块大小数组的函数。该函数迭代数组,在块大小之间循环,并使用 slice 从原始数组中获取当前块大小:const chunks = (arr, chunkSize) => {&nbsp; const result = [];&nbsp;&nbsp;&nbsp; let current = -1;&nbsp; for (let i = 0; i < arr.length; i += chunkSize[current]) {&nbsp; &nbsp; current = (current + 1) % chunkSize.length;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; result.push(arr.slice(i, i + chunkSize[current]));&nbsp; }&nbsp; return result;}const dataset = [{"text":"hi1"},{"text":"hi2"},{"text":"hi3"},{"text":"hi4"},{"text":"hi5"},{"text":"hi6"},{"text":"hi7"},{"text":"hi8"},{"text":"hi9"},{"text":"hi10"},{"text":"hi11"},{"text":"hi12"},{"text":"hi13"},{"text":"hi14"},{"text":"hi15"},{"text":"hi16"}];const result = chunks(dataset, [6, 3]);console.log(result);.as-console-wrapper { max-height: 100% !important; top: 0; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript