【问题标题】:How do I create (d) elements arrays out of another array of (n > d) elements?如何从另一个 (n > d) 元素数组中创建 (d) 元素数组?
【发布时间】:2020-10-25 18:48:54
【问题描述】:

例如,我们有数组:

let arr = [1,2,3,4,5,6,7,8,9] //(n = 9)

现在我想创建最大数量的 d = 5 数组:

数组1:arr1 = [1,2,3,4,5]

数组2:arr2 = [2,3,4,5,6]

数组3:arr3 = [3,4,5,6,7]

数组4:arr4 = [4,5,6,7,8]

数组5:arr5 = [5,6,7,8,9]

我该怎么做?

【问题讨论】:

    标签: javascript arrays loops


    【解决方案1】:

    使用 reducer 的另一种解决方案:

    const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    const size = 5
    
    const result = arr.reduce((acc, _, i) => {
      if (i <= arr.length - size) acc.push(arr.slice(i, i + size))
      return acc
    }, [])
    
    console.log(result)

    警告:如果size &gt; arr.lengthresult 将是一个空数组。

    【讨论】:

      【解决方案2】:

      简单的for 循环和array.slice 在这种情况下应该可以工作:

      let arr = [1,2,3,4,5,6,7,8,9];
      let d = 5;
      
      let result = [];
      
      for(let i = 0; i <= (arr.length - d); i++){
         result.push(arr.slice(i, d+i));
      }
      
      console.log(result);

      【讨论】:

        【解决方案3】:

        我会假设你希望你的“子数组”与你的初始数组保持相同的顺序?:

        const arr = [1,2,3,4,5,6,7,8,9];
        
        console.log(generateSubArrs(arr, 5));
        
        function generateSubArrs(arr, d){
          const outputArrs = [];
          const n = arr.length;
          for (let i = 0; i <= (n - d); i++){
            const tempArr = [];
            for (let j = 0; j < d; j++){
              tempArr.push(arr[i + j]);
            }
            outputArrs.push(tempArr);
          }
          return outputArrs;
        }

        输出:

        [
          [    1,    2,    3,    4,    5  ],
          [    2,    3,    4,    5,    6  ],
          [    3,    4,    5,    6,    7  ],
          [    4,    5,    6,    7,    8  ],
          [    5,    6,    7,    8,    9  ]
        ]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-25
          • 1970-01-01
          相关资源
          最近更新 更多