我期望编写一个将数组(第一个参数)分成大小(第二个参数)长度的组并将其作为二维数组返回的函数。因此,chunkArrayInGroups([“ a”,“ b”,“ c”,“ d”],2)应该返回[[“ a”,“ b”],[“ c”,“ d”]]
function chunkArrayInGroups(arr, size) {
// Break it up.
var result=[];
for (var i=0;i<=Math.ceil(arr.length/size);i++){
var j=0;
if(i!== 0){
j+=size;
size+=size;
}
result[i] = arr.slice(j , size);
}
//return arr.length/size
//results in 1.5
return result;
// results [["a", "b"], ["c", "d"]]
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
我得到了期望的结果,但对解决方案不是很满意,而且,更重要的是,“如果” arr.length = 4; 并且,大小= 2;那为什么arr.length / size = 1?应该不是4/2 = 2吗?
您在循环内修改大小。这基本上使每一步的大小增加一倍。您的示例只有两个子数组的事实掩盖了此问题。尝试更大的数组以查看结果中的问题。
要解决此问题,请在循环外部声明j。切片后将大小添加到j。
编辑:代码,根据要求
function chunkArrayInGroups(arr, size) {
var result = [];
var j = 0;
for (var i = 0; i < Math.ceil(arr.length / size); i++) {
result[i] = arr.slice(j, j + size);
j = j + size;
}
return result;
}
或者,稍微简化一下:
function chunkArrayInGroups(arr, size) {
var result = [];
var pos = 0;
while (pos < size) {
result.push(arr.slice(pos, pos + size));
pos += size;
}
return result;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句