javascript - 范围从 n 在两个方向
问题描述
鉴于let n = 9
,我想回来[6, 7, 8, 9, 10, 11, 12]
。我知道我可以这样写:
const up = [...Array(4).keys()].map(i => i + 9)
const down = [...Array(4).keys()].map(i => 9 - i).reverse()
const result = [...new Set([...down, ...up])]
但是如果n
更改为1
我只想返回正数。如果没有一堆if
陈述,我该怎么做?有没有更有效的方法来写这个?如果您无法分辨,这是给分页器的。
解决方案
您可以使用Array.filter()
过滤掉超出最小和最大页码的值。为方便起见,将其放入函数中:
const paginate = function(num, pages, min, max) {
const up = [...Array(pages - 1).keys()].map(i => num + i + 1).filter(i => i <= max);
const down = [...Array(pages - 1).keys()].reverse().map(i => num - i - 1).filter(i => i >= min);
return [...down, num, ...up];
}
console.log(paginate(5, 4, 1, 10));
console.log(paginate(9, 4, 1, 10));
console.log(paginate(1, 4, 1, 10));
这可以简化为:
const paginate = (num, pages, min, max) =>
[...Array(pages * 2 - 1).keys()].map(i => num + 1 - pages + i).filter(i => i <= max && i >= min);
console.log(paginate(5, 4, 1, 10));
console.log(paginate(9, 4, 1, 10));
console.log(paginate(1, 4, 1, 10));
推荐阅读
- c - 这个结构有多少字节?- 指向结构的指针有多少字节?
- c++ - c++模板类无法修复ostream和istream函数
- postgresql - 如何将数据从 postgresql 同步到 GreenPlum?gpfdist? 还是 gp 流服务器?
- angular - 如何为 angular-cli 设置全局配置?
- sql-server - T-SQL CASE 语句返回不同的过滤器
- python-3.x - 在 Python 3 中,我们可以使用 str.format() 和列表获得以下输出?
- php - MacOS 10.15.1 Catalina 上的 Homebrew PHP 7.4 升级失败
- types - 你能在 Coq 中枚举所有归纳类型的值吗?
- java - 尝试使用 Firebase MLKit 条码扫描器,模拟器屏幕出现“等待条码检测模块下载,请稍候”
- java - JAVA EMAIL API 上的错误(无法解析 javax.mail.Authenticator 类型。它是从所需的 .class 文件中间接引用的)