外观
数学
842字约3分钟
2024-06-14
ceil | floor
- 向上取整 可以指定精度
- 向上取整 .....
console.log(_.ceil(4.006)); // 5
console.log(_.ceil(6.004, 2)); // 6.01
console.log(_.ceil(6040, -2)); // 6100
_.floor(4.006);
// => 4
_.floor(0.046, 2);
// => 0.04
_.floor(4060, -2);
// => 4000
原生实现
//原生的 Math.ceil 只对数字进行向上取整,不支持指定精度
console.log(Math.ceil(4.006)); // 5
console.log(Math.ceil(6.004)); // 7
console.log(Math.ceil(6040)); // 6040
//实现
function ceil(number, precision = 0) {
const factor = Math.pow(10, precision);
return Math.ceil(number * factor) / factor;
}
max | min
- 找到数组中的最大值
- 找到数组中的最小值
_.max([4, 2, 8, 6]);
// => 8
_.max([]);
// => undefined
_.min([4, 2, 8, 6]);
// => 2
_.min([]);
// => undefined
原生实现
Math.max
函数用于返回零或多个数中的最大值,但它不能直接处理数组
console.log(Math.max(4, 2, 8, 6)); // 8
console.log(Math.max(...[])); // -Infinity
// 使用 `spread` 运算符处理数组
const array = [4, 2, 8, 6];
console.log(Math.max(...array)); // 8
// 使用 `apply` 方法处理数组
console.log(Math.max.apply(null, array)); // 8
mean
计算数组中所有元素的平均值
console.log(_.mean([4, 2, 8, 6])); // 5
原生实现
function mean(array) {
if (array.length === 0) {
return NaN; // 或者根据需求返回 0 或 undefined
}
const sum = array.reduce((acc, val) => acc + val, 0);
return sum / array.length;
}
sum
计算数组中所有元素的和
console.log(_.sum([4, 2, 8, 6])); // 20
原生实现
function sum(array) {
return (sum = array.reduce((acc, val) => acc + val, 0));
}
clamp
将数值限制在指定范围内
_.clamp(number, [lower], upper)
console.log(_.clamp(10, -5, 5)); // 5
console.log(_.clamp(-10, -5, 5)); // -5
console.log(_.clamp(3, -5, 5)); // 3
原生实现
function clamp(number, lower, upper) {
if (number < lower) {
return lower;
} else if (number > upper) {
return upper;
} else {
return number;
}
}
function clamp(number, lower, upper) {
return Math.min(Math.max(number, lower), upper);
}
inRange
检查一个数值是否在指定范围内(不包括上限)
_.inRange(number, [start=0], end)
number
(必需):要检查的数值。start
(可选):范围的起始值。默认值为0
。end
(必需):范围的结束值。
console.log(_.inRange(3, 2, 4)); // true
console.log(_.inRange(4, 8)); // true (范围是 0 到 8)
console.log(_.inRange(4, 2, 8)); // true
console.log(_.inRange(2, 2, 8)); // false (2 不包括在范围内)
console.log(_.inRange(1.2, 2)); // true (范围是 0 到 2)
console.log(_.inRange(5.2, 4)); // false
console.log(_.inRange(-3, -2, -6)); // true (范围是 -6 到 -2)
原生实现
function inRange(number, start, end) {
if (end === undefined) {
end = start;
start = 0;
}
return number >= Math.min(start, end) && number < Math.max(start, end);
}
random
用于生成一个范围内的随机数,可以是整数或浮点数。
_.random([lower=0], [upper=1], [floating])
lower
(可选):范围的下限。默认值为0
。upper
(可选):范围的上限。默认值为1
。floating
(可选):是否生成浮点数。如果设置为true
,则生成浮点数。
console.log(_.random(0, 5)); // 生成一个 0 到 5 之间的整数
console.log(_.random(5)); // 生成一个 0 到 5 之间的整数
console.log(_.random(5, true)); // 生成一个 0 到 5 之间的浮点数
console.log(_.random(1.2, 5.2)); // 生成一个 1.2 到 5.2 之间的浮点数
console.log(_.random(1.2, 5.2, true)); // 生成一个 1.2 到 5.2 之间的浮点数
原生实现
Math.random
方法生成一个介于 0(含)和 1(不含)之间的浮点数
//生成整数
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min; // 含min,不含max
}
console.log(getRandomInt(0, 5)); // 生成一个 0 到 5 之间的整数
//生成浮点数
function getRandomFloat(min, max) {
return Math.random() * (max - min) + min;
}
console.log(getRandomFloat(1.2, 5.2)); // 生成一个 1.2 到 5.2 之间的浮点数