stackoverflow的第一个问题,我正在努力与这个算法。这应该是我的数组切片5像“[[0,1],[2,3],[4,5],[6,7],[8]]”但我得到的是“[[0 ,1],[2,3],[4,5] [6,7,8]”阵列算法中的分块数组
function chunkArrayInGroups(arr, size) {
var newArr = [];
console.log(Math.floor(arr.length/size));
for (i = 0; i <= (Math.floor(arr.length/size)) + 1; ++i) {
var cut = size;
newArr.push(arr.splice(0, cut));
}
if (arr.length > 0) {
newArr.push(arr.splice(0, size + (arr.length - size)));
}
return newArr;
}
chunkArrayInGroups([0, 1, 2, 3, 4, 5, 6, 7, 8], 2);
// expected - [[0, 1], [2, 3], [4, 5], [6, 7], [8]]
如果您对问问题的方式任何提示,我会很高兴收到任何建议!
欢迎** **计算器!这可能会帮助你http://stackoverflow.com/help/how-to-ask开始如何在这里作为一个问题在stackoverflow。 – thebenman
你的算法因为这一行不起作用:'for(i = 0; i <=(Math.floor(arr.length/size))+ 1; ++ i){...}'witch is'for (i = 0; i <=(Math.floor(9/2))+ 1; ++ i){...}',最初'Math.floor(arr.length/size)'等于5,但是每一次执行都会通过'size'缩小'arr.length'的大小,所以现在你有了'for(i = 1; i <=(Math.floor(7/2))+ 1; ++ i){...} (i = 2; i <=(Math.floor(5/2))+ 1; ++ i){...}'和'for(i = 3; i <=(Math.floor (3/2))+ 1; ++ i){...}不会执行。所以你只做3次而不是5次。希望这是有道理的。 – brigysl
@brigysl是的,谢谢!我忘了这一个..拼接是危险的! – Mike