我首先指出该代码有效。那不是问题!我只是不明白到底是怎么回事。据我了解,chunked.push方法一直在广告一个新数组。但显然不是。它给出了正确的答案: [[1,2],[3,4],[5]]
我根本不理解这段代码中发生了什么。它会给出正确的答案,并在必要时在每个数组中放置几个项目,但是代码每次都会创建一个新的子数组,不是吗?不,显然不是-但我不明白为什么?请帮忙!
function chunk(array, size) {
let workArr = [...array];
let chunked = [];
for (let i = 0; i < workArr.length; i++) {
let last = chunked[chunked.length - 1];
if (!last || last.length === size) {
chunked.push([workArr[i]])
} else {
last.push(workArr[i]);
}
}
return chunked;
}
以下是一些输入参数和预期结果的示例:
// chunk([1, 2, 3, 4], 2) --> [[ 1, 2], [3, 4]]
// chunk([1, 2, 3, 4, 5], 2) --> [[ 1, 2], [3, 4], [5]]
// chunk([1, 2, 3, 4, 5, 6, 7, 8], 3) --> [[ 1, 2, 3], [4, 5, 6], [7, 8]]
// chunk([1, 2, 3, 4, 5], 4) --> [[ 1, 2, 3, 4], [5]]
// chunk([1, 2, 3, 4, 5], 10) --> [[ 1, 2, 3, 4, 5]]
答案 0 :(得分:1)
这将复制一个数组,并在其中使用了散布运算符
let workArr = [...array];
遍历workArr
数组中的每个项目
for (let i = 0; i < workArr.length; i++) {
}
我认为这会在初次运行时给您undefined
,因为-1
中的索引chunked
上没有任何内容(因为起初chunked.length
是{{1} }),但会将0
设置为last
数组的最后一个元素
chunked
如果let last = chunked[chunked.length - 1];
的值为假(last
,0
,null
,undefined
,""
,NaN
)或false
的长度等于last
(请注意,size
应该是数组或字符串),然后将last
数组的第i个元素(索引从0开始)放入将workArr
数组作为数组,否则将元素从chunked
推入workArr
,但是last
应该是数组
last
然后只需返回if (!last || last.length === size) {
chunked.push([workArr[i]])
} else {
last.push(workArr[i]);
}
数组
chunked