JavaScript拆分数组为子数组(每子数组和不超指定值)的问题排查
问题原因
你的代码存在两个核心错误:
- 引用共用问题:将
temp推入result时,存入的是数组的引用,后续你用temp.length=0清空数组时,会同步修改result中已经存入的数组内容,导致前面攒的子数组被清空,最终只剩下最后存入的[4] - 循环收尾遗漏:循环结束后,最后一轮攒在
temp里的子数组没有被推入result
修正方案
把清空temp的逻辑改为重新赋值新空数组,并且循环结束后追加最后一个子数组即可,修正后代码如下:
const arr = [10,10,10,10,10,10,10,10,10,4,4,4] const result = [] let sum = 0 let temp = [] for(let i=0; i<arr.length; i++){ if(sum + arr[i] <= 100){ sum += arr[i] temp.push(arr[i]) }else{ result.push(temp) sum = 0 // 改为重新赋值空数组,不再复用之前的数组引用 temp = [] temp.push(arr[i]) sum += arr[i] } } // 循环结束后把最后一组推入结果 result.push(temp) console.log(result) // 输出 [[10,10,10,10,10,10,10,10,10,4,4],[4]]
内容的提问来源于stack exchange,提问作者user11328958
相关产品推荐
相关产品推荐

