为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

回首忆惘然 2021-11-18 16:16:47
我究竟如何将数组拆分为 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  },  []) 
查看完整描述

2 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

您可能会考虑创建数组的副本(以避免改变原始数组),然后拼接项目直到它为空,检查并切换指示是否在当前迭代中删除 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);


查看完整回答
反对 回复 2021-11-18
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您可以创建一个接受数组和块大小数组的函数。该函数迭代数组,在块大小之间循环,并使用 slice 从原始数组中获取当前块大小:


const chunks = (arr, chunkSize) => {

  const result = [];

  

  let current = -1;


  for (let i = 0; i < arr.length; i += chunkSize[current]) {

    current = (current + 1) % chunkSize.length;

    

    result.push(arr.slice(i, i + chunkSize[current]));

  }


  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; }


查看完整回答
反对 回复 2021-11-18
  • 2 回答
  • 0 关注
  • 110 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信