赞
踩
一、lodash版本:4.17.5
二、函数:
1、clamp
1)定义:clamp(number, [lower], upper)
2) 作用:返回加紧的数字。
3) 例子。
- const _ = require('lodash');
-
-
- console.log(_.clamp(10, 1, 20)); // 输出:10
-
- console.log(_.clamp(10, 5, -9)); // 输出:5
-
- console.log(_.clamp(1, 15, 2)); // 输出:15
-
- console.log(_.clamp(1, '', 2)); // 输出:1
-
- console.log(_.clamp(10, '', '')); // 输出:0
-
- console.log(_.clamp(2, '', 1)); // 输出:1
-
- console.log(_.clamp('', 2, 10)); // 输出:1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
4) 源码及解读。
源码:
- function clamp(number, lower, upper) {
-
- number = +number
-
- lower = +lower
-
- upper = +upper
-
- lower = lower === lower ? lower : 0
-
- upper = upper === upper ? upper : 0
-
- if (number === number) {
-
- number = number <= upper ? number : upper
-
- number = number >= lower ? number : lower
-
- }
- return number
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
解读: 前面三行将number、lower和upper强制转换为数字类型,防止传入不是数字类型。接着判断lower和upper是否为空,如果不为空就是数值本身,不然就置为0。接着将number和upper进行对比,取两者的最小值。接着拿最小值与lower对比,取最大者。
- console.log(clamp(-10, -5, 5)); // 输出:5
-
- console.log(clamp('', '', 5)); // 输出:0
-
- console.log(clamp('', 10, 5)); // 输出:10
2、inRange
1)定义:inRange(number, [start = 0], end)
2) 作用:判断某个数是否在区间中。如果结尾数没有指定,而起始数指定了,那么起始数将会是0.如果起始数字比结尾数字大,那么将调换大小,以负数来进行对比。
3) 例子。
- const _ = require('lodash');
-
- console.log(_.inRange(3, 2, 4)); // 输出:true
-
- console.log(_.inRange(3, 10, 4)); // 输出:false
-
- console.log(_.inRange(2, 4)); // 输出:true
-
- console.log(_.inRange(1, 1)); // 输出:false
-
- console.log(_.inRange('', 1, 4)); // 输出:false
-
- console.log(_.inRange('', 10, 4)); // 输出:false
-
- console.log(_.inRange(4, '', 10)); // 输出:false
-
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
4) 源码解析。
源码:
- function inRange(number, start, end) {
-
- if (end === undefined) {
-
- end = start
-
- start = 0
- }
- return baseInRange(+number, +start, +end)
- }
-
- function baseInRange(number, start, end) {
-
- return number >= Math.min(start, end) && number < Math.max(start, end)
-
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
解读:在inRange中,第一个if语句中,如果end是空,那么end值设置为start值,start设置为0。例如:
console.log(inRange(3, 2, 4)); // 输出:true
接着调用baseInRange函数,接着判断numer是否是start和end之间的数值。如果是,将返回true,否则返回false。例如:
console.log(inRange(3, 2, 4)); // 输出:true
3、random
1)定义:random([lower=0], [upper= 1], [floating])
2) 作用:产生一个随机数。
3) 例子。
- const _ = require('lodash');
-
- console.log(_.random(0, 10)); // 输出:0
-
- console.log(_.random(0.1, 1)); // 输出:0.9526370972902614
-
- console.log(_.random(0.1, 1.2)); // 输出:1.0932071628590456
-
- console.log(_.random(1, 10, 2.1)); // 输出:4.432399748336776
-
- console.log(_.random(1, true)); // 输出:0.5950723974122696
-
- console.log(_.random(5)); // 输出:3
4)源码解析。
源码:
- function random(lower, upper, floating) {
-
- if (floating === undefined) {
-
- if (typeof upper == 'boolean') {
-
- floating = upper
-
- upper = undefined
-
- }
-
- else if (typeof lower == 'boolean') {
-
- floating = lower
-
- lower = undefined
-
- }
-
- }
-
- if (lower === undefined && upper === undefined) {
-
- lower = 0
-
- upper = 1
-
- }
-
- else {
-
- lower = toFinite(lower)
-
- if (upper === undefined) {
-
- upper = lower
-
- lower = 0
-
- } else {
-
- upper = toFinite(upper)
-
- }
-
- }
-
- if (lower > upper) {
-
- const temp = lower
-
- lower = upper
-
- upper = temp
-
- }
-
- if (floating || lower % 1 || upper % 1) {
-
- const rand = Math.random()
-
- const randLength = `${rand}`.length - 1
-
- return Math.min(lower + (rand * (upper - lower + freeParseFloat(`1e-${randLength}`)), upper))
-
- }
-
- return lower + Math.floor(Math.random() * (upper - lower + 1))
-
- }
-
-
-
-
-
- function toFinite(value) {
-
- if (!value) {
-
- return value === 0 ? value : 0
-
- }
-
- value = toNumber(value)
-
- if (value === INFINITY || value === -INFINITY) {
-
- const sign = (value < 0 ? -1 : 1)
-
- return sign * MAX_INTEGER
-
- }
-
- return value === value ? value : 0
-
- }
-
-
-
- function toNumber(value) {
-
- if (typeof value == 'number') {
-
- return value
-
- }
-
- if (isSymbol(value)) {
-
- return NAN
-
- }
-
- if (isObject(value)) {
-
- const other = typeof value.valueOf == 'function' ? value.valueOf() : value
-
- value = isObject(other) ? `${other}` : other
-
- }
-
- if (typeof value != 'string') {
-
- return value === 0 ? value : +value
-
- }
-
- value = value.replace(reTrim, '')
-
- const isBinary = reIsBinary.test(value)
-
- return (isBinary || reIsOctal.test(value))
-
- ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
-
- : (reIsBadHex.test(value) ? NAN : +value)
-
- }
-
-
-
-
-
- function toNumber(value) {
-
- if (typeof value == 'number') {
-
- return value
-
- }
-
- if (isSymbol(value)) {
-
- return NAN
-
- }
-
- if (isObject(value)) {
-
- const other = typeof value.valueOf == 'function' ? value.valueOf() : value
-
- value = isObject(other) ? `${other}` : other
-
- }
-
- if (typeof value != 'string') {
-
- return value === 0 ? value : +value
-
- }
-
- value = value.replace(reTrim, '')
-
- const isBinary = reIsBinary.test(value)
-
- return (isBinary || reIsOctal.test(value))
-
- ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
-
- : (reIsBadHex.test(value) ? NAN : +value)
-
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
解读:
1)首先的if判断floating是否为空,如果为空接着判断最大值和最小值是否为布尔类型。如果有一方为布尔值,那么将该布尔值赋值给floating,然后将lower或者upper置为空。
2)第二个if表达式判断lower和upper是否同时为空,如果同时为空,就置为0和1;
3)如果lower或者upper又一个不为空,那么将判断最小是否为有限数。如果不是有限数,将其转换为有限数,否则保留数值本身。
4)接着判断upper的值,代码如下:
- if (upper === undefined) {
-
- upper = lower
-
- lower = 0
-
- } else {
-
- upper = toFinite(upper)
-
- }
如果upper为空,那么将lower设置为upper,然后lower设置为0.否则判断upper是否为有限数。
5)然后判断lower是否大于upper,如果是,则调换双方的数值。代码如下所示:
- if (lower > upper) {
-
- const temp = lower
-
- lower = upper
-
- upper = temp
-
- }
6)如果floating存在或者lower大于1或者upper大于1,那么产生随时数。
7)否则利用lower产生随机数。代码如下所示。
- if (floating || lower % 1 || upper % 1) {
-
- const rand = Math.random()
-
- const randLength = `${rand}`.length - 1
-
- return Math.min(lower + (rand * (upper - lower + freeParseFloat(`1e-${randLength}`)), upper))
-
- }
-
- return lower + Math.floor(Math.random() * (upper - lower + 1))
欢迎纠错,共同进步。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。