【问题标题】:Make an array of 60 items to an array of array with 20 items in each array [duplicate]将60个项目的数组制作成一个数组数组,每个数组中有20个项目[重复]
【发布时间】:2019-11-29 23:54:36
【问题描述】:

我有一个包含 60 个项目的数组。我想将它拆分为一个包含 20 个项目的数组中的数组。

这是我拥有的代码,但有点卡在如何分离到数组中。

const initialData = get(certificate, "transcript", []);
const splitData = [];

这就是 splitTranscriptData 最后的样子

[[1,2,3...20],[21,22,23...40],[41,42,43...60]]

我试图使这种动态方式将初始数组分成每个数组中的 20 个项目。例如,我的初始数组有 55 个项目,最终结果将是 3 个数组,其中最后一个有 15 个项目。

当初始数组中有更多项时,比如说 70 项,它将分成 4 个数组,最后一个数组中有 10 项。

【问题讨论】:

  • 您可以通过Array.prototype.slice 函数从您的数组中创建子数组。
  • 如果我的初始数组有 55 个项目,我仍然希望它分成 3 个数组,只是最后一个数组有 15 个项目。
  • 是的,最后一个只有15个项目。
  • 我可以说我必须在我的代码中手动使用Array.prototype.slice 3 次来拆分我的初始数组吗?
  • 没有。您可以使用 for 循环和每个子数组的元素数(20)将数组拆分为子数组。

标签: arrays reactjs


【解决方案1】:

如果总是将 1 x 60 数组转换为 3 x 20 数组,您可以对索引进行硬编码并像这样:

splitData = [initialData.slice(0,20), initialData.slice(20,40), initialData.slice(40,60)]

【讨论】:

    【解决方案2】:

    你可以使用递归来做到这一点:

    const split = (input, output = []) => {
      if (!input.length) return output;
      output.push(input.slice(0, 20))
      return split(input.slice(20), output)
    }
    
    const splitData = split(initialData);
    

    这是它的一个 JSFiddle:https://jsfiddle.net/ma63cpbt/5/

    这会将任意长度的数组动态拆分为长度为 20 的子数组,最后一个子数组包含所有剩余项。

    如果你想要不同的子数组长度,你也可以传入 20 作为参数。

    【讨论】:

      【解决方案3】:
      var items = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
      
      var splittedData  = [];
      
      function splitData(splitLength) {
      
          for(var i = 0;i<items.length; i+=splitLength) { 
              splittedData.push(items.slice(i,i+splitLength));        
          }
      
      }
      

      呼叫:

      splitData(4); 
      

      输出:

      【讨论】:

        【解决方案4】:

        您可以使用 lodash chunk 拆分数组:

        _.chunk(initialData, 20);
        

        【讨论】:

          【解决方案5】:

          无需使用任何你可以轻松做到的库,代码如下:)

           const list = [1,2,3,...60]
              const arrayList = [
                  list.slice(0,20),
                  list.slice(20,40),
                  list.slice(40,60),
              ]
          

          【讨论】:

            【解决方案6】:

            需要拆分的数组

            var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
            

            分割功能

            size- 块的大小。这里应该是 20

                const splittedArray = (arr, size) =>
                  arr.length > size
                    ? [arr.slice(0, size), ...splittedArray(arr.slice(size), size)]
                    : [arr];
            

            以数组和块大小为参数调用函数

            splittedArray(arr, 5)
            

            【讨论】:

              猜你喜欢
              • 2016-12-21
              • 2019-01-14
              • 2019-10-25
              • 1970-01-01
              • 2015-07-03
              • 2015-03-10
              • 1970-01-01
              • 1970-01-01
              • 2021-09-30
              相关资源
              最近更新 更多