Javascript 编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回
我正在解决一个javascript问题,该问题要求我: 编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回 例如,输入Javascript 编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回,javascript,Javascript,我正在解决一个javascript问题,该问题要求我: 编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回 例如,输入 chunk([0, 1, 2, 3, 4, 5], 2) 应返回“分块数组”: [0,1],[2,3],[4,5]] 我可以让它在大多数例子中工作,但当有2个以上的块时,它会切换顺序,我不知道为什么。以下是我编写的代码: function chunk(arr, size) { var newArray = [], i,
chunk([0, 1, 2, 3, 4, 5], 2)
应返回“分块数组”:
[0,1],[2,3],[4,5]]
我可以让它在大多数例子中工作,但当有2个以上的块时,它会切换顺序,我不知道为什么。以下是我编写的代码:
function chunk(arr, size) {
var newArray = [],
i, temp = arr;
for (i = 0;i<= arr.length-size;i+=size){
newArray.push(arr.slice(i,i+size));
temp.splice(i,size);
}
newArray.push(temp);
return newArray;
}
chunk(['a', 'b', 'c', 'd'], 2);
功能块(arr,大小){
var newArray=[],
i、 温度=arr;
对于(i=0;i问题在于,每次迭代时,您都在按size
推进i
,并从位置i
中删除size
元素。这会导致您跳过处理其他块。此外,您的继续条件应该是i
;实际上,您需要测试清空temp
,然后在循环退出后按下它。尝试将循环重写为:
for (i = 0; i < arr.length-size;){
newArray.push(arr.slice(i,i+size));
temp.splice(i,size);
}
另一个版本:
function chunk(arr, size) {
var result = [];
while (arr.length > size) {
result.push(arr.splice(0, size))
}
if (arr.length)
result.push(arr);
return result;
}
功能块(arr,大小){
var newArr=[];
//x小于或等于arr.length。
对于(var x=0;x功能块(arr,大小){
var arr1=[];
变量j=0,温度=尺寸;
var len=阵列长度/尺寸;
对于(var i=0;i
我尝试在console中使用这些代码行,效果非常好。这是我的解决方案:
function chunkArrayInGroups(arr, size) {
var acum=[];
for(i=0;i<arr.length;i=i+size)
{
var vec=arr.slice(i,size+i);
acum.push(vec);
}
return acum;
}
函数chunkArrayInGroups(arr,size){
var acum=[];
对于(i=0;i如此多的方式
function chunkArrayInGroups(arr, size) {
var value = [];
for(var i =0; i<arr.length; i += size){
value.push(arr.slice(i, size+i));
}
return value;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
函数chunkArrayInGroups(arr,size){
var值=[];
对于(var i=0;i函数chunkArrayInGroups(arr,size){
var结果=[],
迭代次数=Math.ceil(arr.length/size);
对于(var i=0;i函数chunkArrayInGroups(arr,size){
var-temp=[];
var结果=[];
对于(变量a=0;a
如果“i”不迭代,这个循环不会永远运行吗?@Gwen-不会,因为每次循环,arr.length
都会下降size
。最终,arr.length-size
将小于i
(始终为0)。(现在我想,既然<代码> i <代码>停留在0,它可以从循环中被消除。我将重写循环来显示。)请考虑添加代码的解释。只有代码是不够的。还解释为什么答案比接受的答案好(如果是这样的话)我也在研究这个问题,现在我看到了这个代码,它工作了,但我还是不明白,有人能给我解释一下吗?我们的大小为2,arr.splice(0,2)只给我们['a','b',],下一步是什么?你是什么意思-下一步是什么?@u mulder,我们得到这个结果:['a','b',['c','d']],但是while循环的末尾没有++,不允许重复执行代码。我在这里感到困惑。我甚至不知道如何表达我自己。没有必要添加++
,只要你拼接数组,数组就会减少。@u mulder,哦,好吧!现在我明白了,谢谢你先生!这个问题的另一个简单答案。Thoug它不是执行速度最快的。只需将总数组长度除以所需的大小即可得到总迭代次数&因此这个问题也可以在不使用splice的情况下解决!!请将您的评论移到答案中
function chunk(arr, size) {
var arr1=[];
var j=0,temp=size;
var len = arr.length/size;
for (var i=0; i<len; i++){
arr1.push(arr.slice(j,size));
j+=temp;
size+=temp;
}
return arr1;
}
chunk([0, 1, 2, 3, 4, 5], 2);
function chunk(arr, size) {
var newArr = []; // New empty array
while (arr.length > 0) { // Loop thru the array items
newArr.push(arr.splice(0, size)); // Removes first 2 items then add it to new array
}
return newArr; // New 2D array
}
function chunkArrayInGroups(arr, size) {
var acum=[];
for(i=0;i<arr.length;i=i+size)
{
var vec=arr.slice(i,size+i);
acum.push(vec);
}
return acum;
}
function chunkArrayInGroups(arr, size) {
var value = [];
for(var i =0; i<arr.length; i += size){
value.push(arr.slice(i, size+i));
}
return value;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
function chunkArrayInGroups(arr, size) {
var result = [],
iterations = Math.ceil(arr.length/size);
for (var i =0; i<iterations;i++){
var sub = arr.splice(0, size);
result.push(sub);
}
return result;
}
function chunkArrayInGroups(arr, size) {
var temp = [];
var result = [];
for (var a = 0; a < arr.length; a++) {
if (a % size !== size - 1)
temp.push(arr[a]);
else {
temp.push(arr[a]);
result.push(temp);
temp = [];
}
}
if (temp.length !== 0)
result.push(temp);
return result;
}