Javascript 按3的块对数组进行排序
假设您有一个数组,并希望将其除以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
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;指数
一个选项是使用ES6reduce
将数组分组为多维数组。使用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);