JS获取UUID及其它随机字符串

前言

开发过程中我们可能需要一些不重复的数字或字符串,根据使用场景的不同我们可以使用不同的方式。

UUID

基本能保证唯一。

1
2
3
4
5
6
7
function generateUUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0,
v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}

测试一下

1
2
3
4
5
let mSet = new Set();;
for(let i=0;i<10000;i++){
mSet.add(generateUUID());
}
console.info(mSet.size);

或者

1
2
3
4
5
6
let arr = [];
for(let i=0;i<10000;i++){
arr.push(generateUUID());
}
const uniqueArr = [...new Set(arr)];
console.info(uniqueArr.length);

时间戳

不太适用与保证唯一的地方,但是比如页面添加参数来禁用缓存的时候可以使用时间戳。

毫秒

在 JavaScript 中,你可以使用 Date.now() 方法来获取当前的时间戳。

它返回自 1970 年 1 月 1 日 00:00:00 UTC(协调世界时)以来经过的毫秒数。

以下是一个示例:

1
2
var timestamp = Date.now();
console.log(timestamp);

这将在控制台输出当前的时间戳。

要获取当前的时间戳(以秒为单位),你可以使用 Math.floor() 函数将毫秒时间戳除以 1000 并向下取整。

下面是一个示例:

1
2
var timestampInSeconds = Math.floor(Date.now() / 1000);
console.log(timestampInSeconds);

这将输出当前的时间戳(以秒为单位)到控制台。请注意,Date.now() 返回的是当前的毫秒时间戳,通过除以 1000 并向下取整,可以将其转换为以秒为单位的时间戳。

时间戳+随机字符串

基本也能保证唯一,并且好处在于前8位是按照时间排序的,性能相比于UUID会高一点。

不适用于要保证完全唯一的场景。

1
2
3
function getRandomStr(){
return Date.now().toString(36)+Math.random().toString(36).substring(2, 10);
}

测试一下

1
2
3
4
5
let mSet = new Set();;
for(let i=0;i<10000;i++){
mSet.add(getRandomStr());
}
console.info(mSet.size);

我这里测试了一万次基本上不会重复。