此算法的目的是返回一个数组,该数组在其中分成较小的二维数组。每个内部数组的长度由size
定义。
.slice()
方法的递归调用在这里如何工作?
它如何使函数返回将数组拆分为较小的子数组?
我不明白这种解决方案。
function chunkyArrayInGroups(arr, size){
if(arr.length <= size){
return [arr];
} else {
return [arr.slice(0, size)].concat(chunkyArrayInGroups(arr.slice(size), size));
}
}
答案 0 :(得分:3)
在调用堆栈上时,从数组前面(.slice(size)
)切下块:
[0, 1, 2, 3, 4, 5] -> [2, 3, 4, 5] -> [4, 5] -> []
现在,在每个递归调用中,都存在一个中间值,该中间值包含被切掉的部分(.slice(0, size)
):
[0, 1] [2, 3] [4, 5]
现在,当堆栈展开时,分块的部分将串联在一起:
[0, 1] [2, 3] [[4, 5]]
[0, 1] [[2, 3], [4, 5]]
[[0, 1], [2, 3], [4, 5]]