javascript - 按 3 的 block 对数组进行排序

标签 javascript arrays sorting

假设您有一个数组并想将它分成 3 个 block 。如果数组是..

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

...新数组将是

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

分块部分应该是这段代码(如果排序像 newArr):

let chunkedArr = _.chunk(_.toArray(newArr), 3);

...但是我无法弄清楚如何将 arr 排序为 newArr 以便能够以正确的顺序进行分块。处理这种情况的正确方法是什么?

<子> 请注意,整数只是伪整数,我将使用适当的数组对象。

最佳答案

一种选择是使用 ES6 reduce 将数组分组为多维数组。使用 concat 来展平多维数组。

[].concat(...) - 基本上展平了多维数组。从一个空数组 [] 开始,您可以连接 每个辅助数组。使用扩展运算符 (...) 重复每个辅助数组并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);

关于javascript - 按 3 的 block 对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50539132/

相关文章:

python - 用于按值然后按键对 dict 进行排序的一行代码?

javascript - 在Javascript中对点对象数组进行排序

javascript - 使用 Node.js、Express 和 Trialpay 进行 HMAC MD5 验证

php - 来自数组的回显值

javascript - 如何使用外部脚本向 svg 图形对象添加事件

c - 字符串数组和 char ** 环境变量

javascript - 数组中的数组,AngularJS,ng-repeat

javascript - 获取属于 JavaScript/Node js 中特定 ID 的数组对象的计数

javascript - 在 jQuery 中格式化数字

javascript - 谷歌地图,在超过 8 个航点之间画线