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/

相关文章:

javascript - 是否可以修改现有 RegExp 上的标志?

javascript - Lodash:提取属性、分割数组、获取唯一值

java - 数组不显示所有元素

algorithm - 寻找某些数组最快的排序算法

javascript - 我可以在 asp.net-mvc 3 中的 @Ajax.Actionlink 中传递 Javascript 变量吗?

javascript - D3-动态更新折线图

javascript - 如何修复这个IE6输入错误

java - 带数组的 if 语句的空指针异常

php - 使用 MYSQL ORDER BY 子句,是否可以按自定义顺序对某些字段进行 ORDER BY

iphone - 按升序对 NSDictionary 进行排序