如何在JavaScript中实现无负数的7位分页序列生成?
实现简洁的分页数字序列生成
基于你现有的range函数,完全可以不用大量if/else来实现需求,这里提供两种简洁的方案:
方案一:使用三元表达式(最易读)
三元表达式属于简洁的条件判断,不算“大量if/else”的范畴,代码可读性很高:
const range = (start, stop) => Array.from({ length: (stop - start)}, (_, i) => start + i); const getPaginationNumbers = (currentPage) => { // 核心逻辑:当前页大于3时取前后3个的起始值,否则固定从3开始 const start = currentPage > 3 ? currentPage - 3 : 3; // 结束值=起始值+7,保证生成7个连续数字 const stop = start + 7; return range(start, stop); };
测试示例:
- 输入
17→ 返回[14,15,16,17,18,19,20] - 输入
2→ 返回[3,4,5,6,7,8,9] - 输入
4→ 返回[1,2,3,4,5,6,7]
方案二:纯算术运算(无任何条件关键字)
如果想彻底避开条件判断关键字,可以利用JavaScript布尔值转数字的特性(true为1,false为0)来计算起始值:
const range = (start, stop) => Array.from({ length: (stop - start)}, (_, i) => start + i); const getPaginationNumbers = (currentPage) => { // 通过布尔值的算术运算实现分支逻辑 const start = (currentPage > 3) * (currentPage - 3) + (!(currentPage > 3)) * 3; const stop = start + 7; return range(start, stop); };
原理很简单:当currentPage>3时,第一个乘积项生效,第二个项为0;反之则第二个项生效,第一个项为0,最终得到符合要求的起始值。
内容的提问来源于stack exchange,提问作者Udders
相关产品推荐
相关产品推荐

