JavaScript的Lodash库中inRange方法为何start大于end时会交换参数?
关于 Lodash
inRange 边界自动交换的设计逻辑与适用场景 核心设计出发点
这个特性的核心是降低使用成本,减少开发者的冗余代码:
- 业务场景中拿到的两个区间边界很多时候没有固定的大小顺序,如果没有自动交换特性,开发者每次调用前都需要手动写逻辑比较两个边界的大小、交换后再传参,会多出很多重复的样板代码
- 符合普通人对「数值区间」的直觉认知:我们平时说「数值在a和b之间」的时候,本身就不要求a必须小于b,这个设计把自然语言的直觉映射到了方法逻辑里,不需要开发者强制适配「小值在前大值在后」的传参规则
常见适用场景
- 动态区间判断:比如从接口、用户输入获取到的上下限参数,无法保证返回顺序,直接调用
inRange(待校验值, 边界1, 边界2)就能得到正确结果,不需要额外做顺序校验 - 交互类场景:比如拖拽、范围滑块等组件的开发,用户操作时可能从左到右选范围,也可能从右到左选,得到的起始坐标和结束坐标大小是不确定的,自动交换特性可以直接适配两种操作逻辑
- 快速开发场景:写测试脚本、临时数据过滤等快速开发的场景下,不需要刻意调整边界顺序,随手传参就能得到正确结果,提升开发效率
补充说明:该特性不会改变
inRange左闭右开的判断规则,比如inRange(3, 10, 2)和inRange(3, 2, 10)等价,都会返回true;inRange(10, 10, 2)和inRange(10, 2, 10)等价,都会返回false。
内容的提问来源于stack exchange,提问作者rigan
相关产品推荐
相关产品推荐

