Javascript 按3的块对数组进行排序

Javascript 按3的块对数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,假设您有一个数组,并希望将其除以3的块。如果数组为 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排序): …然而,我不知道如何将arr排序为n

假设您有一个数组,并希望将其除以3的块。如果数组为

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
排序):

…然而,我不知道如何将
arr
排序为
newArr
,以便能够按正确的顺序分块。处理此类案件的正确方式是什么

请注意,整数只是伪整数,我将使用正确的数组对象。

请检查此项,它可能会对您有所帮助。我还引用了一个来自。请检查并让我们知道。你还需要什么吗

谢谢

下面是示例代码

var i,j,resArr,chunkSize=10;
对于(i=0,j=array.length;i请尝试以下方法():

//此版本也适用于可变块大小。
设arr=[1,2,3,4,5,6,7,8,9,10,11,12,13];
警报(块(arr,3));//您可以在此处更新块大小
函数块(arr、chunkSize){
var结果=[];
var指数=0;
对于(var i=0;i

//此版本仅适用于大小为3的块。
设arr=[1,2,3,4,5,6,7,8,9,10,11,12,13];
设r1=[];
设r2=[];
设subar3=[];
var结果=[];
变量i=0,j=0,k=0;
对于(var指数=0;指数
一个选项是使用ES6
reduce
将数组分组为多维数组。使用
concat
将多维数组展平

[].concat(…)
-基本上是将多维数组展平。从一个空数组
[]
开始,您可以
concat
每个辅助数组。使用扩展运算符(
..
)重复每个辅助数组和
concat

让arr=[1,2,3,4,5,6,7,8,9,10,11,12,13];
设组=3;
让newArr=[].concat(…arr.reduce((c,v,i)=>{
设k=i%组;
c[k]=c[k]| |[];
c[k].推力(v);
返回c;
}, []));
console.log(newArr);
const-original=[1,2,3,4,5,6,7,8,9,10,11,12,13]
常量块=3
函数getChunckedArr(arr,n){
设sub=新数组(n);
让结果=[];

for(设i=0;它返回
[1,4,7,10,13,2,5,8,11,14,2,5,8,11,14]
但是,它有重复的值:/n请记住,13不是明确的最终索引,它应该对无限元素起到一致的作用。请重新检查。这是最后一行的一个小错误。我在第二个子数组中添加了两次。是的,这对数组的任何给定长度都有效。这也非常好!a另外:
result.push(subar1,subar2,subar3);
实际上可以非常有效地将内容划分为3个块!我已经用纯javascript制作了另一个版本,它也可以处理不同的块大小。请检查:您能解释一下
[].concat(…)
用于?EDIT:Nvm,刚刚看到了关于“展平多维数组”的部分。@AsadSaeeduddin我添加了一个简单的解释:)
let chunkedArr = _.chunk(_.toArray(newArr), 3);
//This version works for variable chunk sizes as well.
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
alert(chunks(arr, 3)); //You can update chunk size here

function chunks(arr, chunkSize) {
  var result = [];
  var index = 0;
  for (var i = 0; i < chunkSize; i++) {
    for (var j = 0; j < arr.length / chunkSize; j++) {
      if (arr[i + (chunkSize * j)] != null)
        result[index++] = arr[i + (chunkSize * j)];
    }
  }
  return result;
}
//This version only works for chunks of size 3.
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
let subArr1 = [];
let subArr2 = [];
let subArr3 = [];
var result = [];
var i = 0, j = 0, k = 0;

for (var index = 0; index < arr.length; index++) {
  if (index % 3 == 0) {
    subArr1[i++] = arr[index];
  }
  if (index % 3 == 1) {
    subArr2[j++] = arr[index];
  }
  if (index % 3 == 2) {
    subArr3[k++] = arr[index];
  }
}

result.push(subArr1, subArr2, subArr3);
alert(result);
const original = [1,2,3,4,5,6,7,8,9,10,11,12,13]
const chunks = 3

function getChunckedArr(arr, n) {
  let sub = new Array(n);
  let result = [];

  for (let i=0; i<sub.length; i++)
    sub[i] = []

  arr.forEach(function (val, index){
    let o = (index % n);
    sub[o][sub[o].length] = val;
  });

  for (let i=0; i<sub.length; i++)
    result.push.apply(result, sub[i]);

  return result;
}

const chunked = getChunckedArr(original, chunks);