按3的块排序数组

sen*_*nty 3 javascript arrays sorting

假设你有一个数组,并希望将它除以3的块.如果数组是..

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
Run Code Online (Sandbox Code Playgroud)

......新阵列将是

let newArr = [1, 4, 7, 10, 13,   2, 5, 8, 11,   3, 6, 9, 12]

// In other words:
1  2  3
4  5  6
7  8  9
10 11 12
13
Run Code Online (Sandbox Code Playgroud)

分块部分应该是这个代码(如果排序的话newArr):

let chunkedArr = _.chunk(_.toArray(newArr), 3);
Run Code Online (Sandbox Code Playgroud)

... ...但是我无法弄清楚如何排序arr,以newArr能够在块正确的顺序.处理此类案件的正确方法是什么?

请注意,整数只是伪,我将使用适当的数组对象.

Edd*_*die 5

一种选择是使用ES6 reduce将数组分组为多维数组.使用concat扁平化的多维数组.

[].concat(...) - 基本上使多维数组变平.从空数组开始[],concat每个辅助数组.使用spread运算符(...)重复每个辅助数组和concat每个辅助数组.

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
let groups = 3;

let newArr = [].concat(...arr.reduce((c, v, i) => {
  let k = i % groups;
  c[k] = c[k] || [];
  c[k].push(v);
  return c;
}, []));

console.log(newArr);
Run Code Online (Sandbox Code Playgroud)