开发过程中我们可能需要一些不重复的数字或字符串,根据使用场景的不同我们可以使用不同的方式。
基本能保证唯一。
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);
});
}
测试一下
let mSet = new Set();;
for(let i=0;i<10000;i++){
mSet.add(generateUUID());
}
console.info(mSet.size);
或者
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(协调世界时)以来经过的毫秒数。
以下是一个示例:
var timestamp = Date.now();
console.log(timestamp);
这将在控制台输出当前的时间戳。
要获取当前的时间戳(以秒为单位),你可以使用 Math.floor()
函数将毫秒时间戳除以 1000 并向下取整。
下面是一个示例:
var timestampInSeconds = Math.floor(Date.now() / 1000);
console.log(timestampInSeconds);
这将输出当前的时间戳(以秒为单位)到控制台。请注意,Date.now()
返回的是当前的毫秒时间戳,通过除以 1000 并向下取整,可以将其转换为以秒为单位的时间戳。
基本也能保证唯一,并且好处在于前8位是按照时间排序的,性能相比于UUID会高一点。
不适用于要保证完全唯一的场景。
function getRandomStr(){
return Date.now().toString(36)+Math.random().toString(36).substring(2, 10);
}
测试一下
let mSet = new Set();;
for(let i=0;i<10000;i++){
mSet.add(getRandomStr());
}
console.info(mSet.size);
我这里测试了一万次基本上不会重复。