所需此功能的详细说明



我正在通过一个函数,其主要目的是为应用程序的每个用户生成唯一的ID

guid: function() {
    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);
    });
  },

我需要在 replace(/[xy]/g) {即这意味着什么}上的解释,而 (r&0x3|0x8)的含义是什么。

/[xy]/gRegEx字面。String.prototype.replace(..)RegEx或子字符串作为其第一个参数,而新的子字符串或函数作为其第二个。

/[xy]/g是一个正则表达式,与原始字符串中的单个字符 xy匹配。

replace(..)将使用给定功能替换所有与正则('x'或y'(相匹配的子字符串。

该函数基本上给出了replace(..)的随机字符,以替换'x'或y',并且对'y'进行其他&操作(它仍然给出随机字符,但有一个不同的字符(。

如果是'y',则分配了(r&0x3|0x8)

(r&0x3|0x8)中,r是前面生成的随机数。0x3在二进制中为11(基数2(。r&0x3提取r的最低两个位。例如,如果r(随机数(为6。6中的6个为110(110)&(11)提取最低位,因此结果是基本2中的(10),该基数在基础10中转换为2。因此分配了2。如果r&0x3的值为0,则|0x8零件使其落回到0x8,即8岁。要了解有关此信息的更多信息,请在钻头操作员上阅读

总而言之,原始字符串xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx中的" x"one_answers" y"是占位符,它通过用随机字符替换它们来生成某种随机ID,例如b9e08d48-0dfc-4a27-ba77-4a94b363b311

到2013年,此功能开始在stackoverflow上弹出(例如,此处(。如果您搜索关键字'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx',您可以轻松地在stackoverflow上找到20个提及。

试图进一步追踪它,我最早发现的是在2011年的Github上,当时有人试验以找到较短的功能。(即在这里(。实际上,他提供的最后一个解决方案似乎也更短,也可能更快。尽管如此,您引用的版本是最受欢迎的版本。

要避免进一步复制,您可能需要用外部库替换。

npm install uuid

并用

替换该代码
import { v4 as uuidv4 } from 'uuid';
uuidv4(); 

如下所述。

相关内容

  • 没有找到相关文章

最新更新