javascript - 分块算法帮助 JS
问题描述
在 JS 中进行一些初学者算法练习。我不明白“如果”语句中的“分块”是如何工作的。
我的主要困惑是在迭代到第二个值之后;因为在第一次运行中,它满足最后未定义的标准;所以“1”推入分块变量。因此,一旦第二个变量 2 出现,由于现在定义了 last 并且 Last 的长度不等于“len”参数,它将转到 else 部分。2 将被推入“last”,它会形成 last =“[1],2”?
然后,当第三个值 (3) 开始出现时,我就更加困惑了。if 语句的 chunked.push([number]) 如何知道当 number 也是 3 时将 [1],2 准确推送到 chunked 中?是不是省略了3?我知道 last 的长度在这一点上遇到了 len 但它是如何从 [1],2 到块 [1,2] 的?
我假设 3 也会被推到“最后一个”。
如果这听起来也令人困惑,我深表歉意!我在网上看了很多关于解决同样问题的教程,但没有详细解释。
function chunkedArr(arr, len){
const chunked = [];
for (let number of arr){
const last = chunked[chunked.length-1]
console.log(last)
if(!last || last.length === len){
chunked.push( [number]);
} else {
last.push(number)
}
}
return chunked;
}
console.log(chunkedArr([1,2,3,4,5,6],2))
解决方案
一个关键的见解可能chunked
是数组数组。
在示例中,在第二次迭代中,chunked
将不是[1]
,而是[[1]]
。请注意,它是一个数组的数组。因此,然后last
被分配内部唯一的子数组chunked
,即[1]
,并且在else
块中,值 2 被附加到该子数组,所以它变成[1, 2]
。因为last
真的是位于里面的子数组chunked
,chunked
现在看起来像这样:[[1, 2]]
。
在下一次迭代中,值为 3,if
条件为真,因为 nowlast
为[1, 2]
,因此具有所需的长度 2。此时 的值last
保持不变。这个子阵列现在是“满的”。一个新的子数组被附加到chunked
,所以它看起来像[[1, 2], [3]]
在下一次迭代中,值为 4,现在last
将被分配更新的子数组,即[3]
. 所以它继续......
推荐阅读
- reactjs - 将 DraftJS html 返回到父组件
- google-apps-script - Google Apps Script V8 赋值为 null 取消调试
- javascript - neo4j 多重匹配合并使关系失败
- javascript - 使用 getJSON 获取单个值
- java - 涵盖多种日期格式的正则表达式
- python - model_main.py 文件使用的是 Python2.7 而不是 Python3
- flutter - 如何在颤动中导航到小部件的父级
- python - 将 pandas 数据框中的每个单元格更改为百分比
- html - 如何将应用程序缓存清单转换为服务工作者
- sql - 对在我的代码中的后续动态查询中使用的变量使用动态值