首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >成批循环,不重复

成批循环,不重复
EN

Stack Overflow用户
提问于 2022-02-26 06:28:29
回答 1查看 84关注 0票数 0

很抱歉,如果这是一个愚蠢的问题,但我对编程和试图编写一个分批处理事物的循环还很陌生。

代码语言:javascript
运行
复制
const totalPages = 13;
const batchSize = 3;
const startFrom = 0;
let processed = startFrom || 1;

while (processed < totalPages) {
    let start = processed; 
    let end = Math.min(start + batchSize, totalPages); 
    console.log(`processing batch: ${start}-${end}`); 
    processed = end;
}

产出:

代码语言:javascript
运行
复制
processing batch: 1-4
processing batch: 4-7
processing batch: 7-10
processing batch: 10-13

然而,开始和结束都不是我所期望的,我需要的是:

代码语言:javascript
运行
复制
processing batch: 1-3
processing batch: 4-6
processing batch: 7-9
processing batch: 10-12
processing batch: 13-13
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-26 06:51:34

processed = 1开始,但这不是真的:此时还没有“处理”任何东西,所以应该是0。另一方面,start不应该等同于processed,而应该是另一个--因为它是继那些已经处理过的之后的下一个。

相应地修改其他表达式:

代码语言:javascript
运行
复制
const totalPages = 13;
const batchSize = 3;
const startFrom = 0;
let processed = startFrom;

while (processed < totalPages) {
    let start = processed + 1; 
    let end = Math.min(processed + batchSize, totalPages); 
    console.log(`processing batch: ${start}-${end}`); 
    processed = end;
}

为此使用for循环更为常见。您也可以将这些参数作为函数参数。最后,startFrom可能不是这个变量的好名称,因为它建议了一些项(从1开始)。我建议使用skip,这样0就意味着不应该跳过任何东西:

代码语言:javascript
运行
复制
function printBatches(totalPages, batchSize, skip=0) {
    for (let processed = skip; processed < totalPages; processed += batchSize) {
        let start = processed + 1;
        let end = Math.min(processed + batchSize, totalPages); 
        console.log(`processing batch: ${start}-${end}`); 
    }
}

printBatches(13, 3);

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71274562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档