javascript - 范围数组,包括最小值、最大值和范围数
问题描述
我有一个数字范围,我想将其拆分为 n 个大小相等的范围。例子:
[min, max], n
0, 10, 5 = [[0, 2], [2, 4], [4, 6], [6, 8], [8, 10]]
所以我想构建一个函数,如:
function buckets(range, bucketsNumber) {
const [min, max] = range
const bucketRange = (max - min + 1) / bucketsNumber
const res = _.range(1, bucketsNumber).map((i) => {
const start = (idx) => bucketRange * (idx - 1) + min
const end = start(i) + bucketRange - 1
return [start(i), end]
})
return res
}
上面的函数不起作用,因为buckets([0, 10], 5)
返回:
[
[ 0, 1.2000000000000002 ],
[ 2.2, 3.4000000000000004 ],
[ 4.4, 5.6000000000000005 ],
[ 6.6000000000000005, 7.800000000000001 ]
]
那个代码有什么问题?
buckets
应该也适用于负值range
..
解决方案
您可以存储最后一个正确的值并计算右侧的新值。
function buckets([min, max], length) {
return Array.from(
{ length },
((t, f) => (_, i) => [t, t = ++i === length ? max : min + f * i])
(min, (max - min) / length)
);
}
console.log(buckets([0, 10], 5));
推荐阅读
- xslt - 仅当 XSLT 中的正则表达式匹配时才呈现 HTML 元素
- vim - 从 Vim 复制到 VSCode 导致额外的选项卡
- r - 使用 CSPLIT 拆分字符串的前 10 个字符
- caching - 在 Spring Data Geode 客户端应用程序中获取区域统计信息
- c - 在 FSEvent 回调中访问应用程序委托函数
- javascript - 未捕获的类型错误:无法读取 null 的属性“每个”
- python - 销售额的前 80%
- android - 使用自动填充框架填充 Android WebView 中的输入?
- python - python脚本排除csv单元格数据的特定字段
- ios - 公历objective-c中错误的Year和weekOfYear