JavaScript 按相邻元素detail长度和规则分块数组问题
问题根源
你原来的代码核心问题是循环增量固定为传入的size(也就是3),没有根据当前块实际取的元素数量动态调整:
- 当你判断相邻两项满足条件取了2个元素作为一块时,i应该只+2,而不是固定+3,否则就会跳过第三个位置的元素,导致最终总元素数不对。
- 另外原来的代码最后多套了一层数组返回,你要的结果本身直接return
returnedArray即可,不需要额外用[]包裹。
修复后的代码
function isApsChunk(rawArray, size) { const returnedArray = []; let i = 0; // 用while循环更方便控制动态步长 while (i < rawArray.length) { // 优先判断是否满足2元素成块的条件 if (i + 1 < rawArray.length && rawArray[i].detail.length + rawArray[i + 1].detail.length >= 11) { returnedArray.push(rawArray.slice(i, i + 2)); i += 2; } else { // 不满足条件就按指定size取,剩余不足size的直接全部作为最后一块 returnedArray.push(rawArray.slice(i, i + size)); i += size; } } return returnedArray; } console.log(isApsChunk(isQuestions, 3))
验证效果
调用该函数传入你的示例数组,输出结果和你给出的预期结构完全一致:
- 第一块:第0、1项,detail长度和6+8=14≥11,取2个
- 第二块:第2、3项,detail长度和7+4=11≥11,取2个
- 第三块:第4、5、6项,4+4=8<11,取3个
7个元素全部处理完成,没有遗漏。
内容的提问来源于stack exchange,提问作者Kobayashi
相关产品推荐
相关产品推荐

