【问题标题】:Chunk array in javascript by adding only 1 element from next chunk通过从下一个块中仅添加 1 个元素,在 javascript 中创建块数组
【发布时间】:2018-10-26 02:49:20
【问题描述】:

我希望将 JavaScript 中的数组分成 3 个块。但我只想将块增加 1 个元素。下面的例子:

[1,2,3,4,5,6,7,8] => [1,2,3], [2,3,4], [3,4,5], [4,5,6], [5,6,7], [6,7,8]

所有结果数组的大小应为 3。因此只有一个元素向左滑动。

我有以下代码将数组分成 3 块:

_.chunk($scope.substituteItems, 3);

这段代码将数组划分为: [1,2,3,4,5,6,7,8] => [1,2,3], [3,4,5], [5,6,7], [8]

显然,这段代码只是将数组分成相等的块,这不是我想要的。

【问题讨论】:

    标签: javascript arrays chunks


    【解决方案1】:

    您可以使用reduce() 循环遍历数组。使用slice() 将数组浅拷贝成块。

    let arr = [1, 2, 3, 4, 5, 6, 7, 8];
    let numOfChunk = 3;
    
    let result = arr.reduce((c, v, i, a) => {
      if (i + numOfChunk <= a.length) c.push(a.slice(i, i + numOfChunk));
      return c;
    }, [])
    
    
    console.log(result);

    如果您喜欢一行代码,也可以使用concat() 代替push()

    let arr = [1, 2, 3, 4, 5, 6, 7, 8];
    let numOfChunk = 3;
    
    let result = arr.reduce((c, v, i, a) => i + numOfChunk <= a.length ? c.concat([a.slice(i, i + numOfChunk)]) : c, [])
    
    console.log(result);

    【讨论】:

      【解决方案2】:

      使用原生 js... 如果您的n 元素数组按照您的描述顺序被分块为大小为c 的块,则将有n-c+1 总块,在您的情况下为8-3+1=6,映射数组的第一个n-c+1 元素到包含自身的块 + 下一个 2:

      let c=3, arr=[1,2,3,4,5,6,7,8];
      let result=arr.slice(0,arr.length-c+1).map((v,k)=>arr.slice(k,k+c));
      console.log(result); 
      

      【讨论】:

      • 另外代码必须兼容IE。 IE 不支持 let 命令。
      • 只需使用 var 而不是 let 它应该完全一样工作
      猜你喜欢
      • 2021-12-09
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      相关资源
      最近更新 更多