在现代Web开发中,前端应用程序的需求越来越复杂,需要产生随机数来模拟数据、进行算法测试等等的需求也越来越多。在这种情况下,许多开发人员都采用了随机数生成器如Math.random()。但是,这种方法在很多方面都存在问题,比如它的随机性不够高、无法重现等等。因此,一个更好的随机数生成器是必要的。
在本文中,将介绍一个npm包@thi.ng/random,它是一款高质量的随机数生成器,采用TypeScript编写,并提供了许多有用的函数,使其变得更加易于使用。此外,@thi.ng/random还有一些高级功能,如序列生成和游程编码。
安装
安装@thi.ng/random可以使用npm:
npm install @thi.ng/random
或者使用yarn:
yarn add @thi.ng/random
使用
@thi.ng/random提供了许多有用的函数,下面分别介绍一下。
random
生成返回0到1之间浮点数的函数:
import { random } from "@thi.ng/random"; console.log(random()); // 0.005981781085812874
也可以通过传入min和max的值产生在指定范围的随机数:
console.log(random(-10, 10)); // -9.596740923986568
int
生成返回0到n-1之间整数的函数:
import { int } from "@thi.ng/random"; console.log(int(10)); // 4
可以传入一个min和max指定范围:
console.log(int(2, 6)); // 3
weightedRandom
生成根据权重生成值的函数:
-- -------------------- ---- ------- ------ - -------------- - ---- ----------------- ------------ ---------------- --- --------- --- ---------- --- ---------- -- -- -- ------
shuffle
生成随机排序数组的函数:
import { shuffle } from "@thi.ng/random"; console.log(shuffle([1, 2, 3, 4, 5])); // [4, 3, 5, 1, 2]
也可以通过传入一个rng函数来控制随机性:
console.log(shuffle([1, 2, 3, 4, 5], () => 0.5)); // [1, 2, 3, 4, 5]
Seq
Seq类可以用于生成随机序列。默认情况下,它生成[0,1]之间的浮点数序列:
import { Seq } from "@thi.ng/random"; console.log(new Seq().take(5).toArray()); // [0.3146819293174892, 0.6547277111208892, 0.3708136045226651, 0.8869031667909179, 0.0890960692000838]
也可以通过传入一个与Math.random类似的rng函数来控制随机性:
console.log( new Seq(() => 0.5) .take(5) .toArray() ); // [0.5, 0.5, 0.5, 0.5, 0.5]
runLengthEncoding
runLengthEncoding函数可以将数字序列压缩为游程编码:
import { runLengthEncoding } from "@thi.ng/random"; console.log( runLengthEncoding([7, 2, 2, 2, 6, 6, 9, 3, 3, 3]) ); // [[7, 1], [2, 3], [6, 2], [9, 1], [3, 3]]
示例
下面是一个简单的使用示例。该程序使用@thi.ng/random生成一个包含10个随机数的数组,并将数组中的每个元素乘以2:
-- -------------------- ---- ------- ------ - --- - ---- ---------------------- ------ - ---- ------ - ---- ----------------- ----- ------ - --- ----- --------- -------- -- - - -- ----------- --------------------
结论
@thi.ng/random是一个高质量的随机数生成器,提供了许多有用的函数,包括生成随机数、生成整数、加权随机、随机排序、序列生成和游程编码。它的简单、易用和高级功能使其成为现代Web开发中不可或缺的一部分。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedab52b5cbfe1ea0610721