需要详细解释此功能

时间:2018-03-26 06:16:53

标签: javascript algorithm guid

我正在经历一个函数,其主要目的是为应用程序的每个用户生成一个唯一的id,可以有人向我解释函数的工作。

replace(/[xy]/g)

我需要解释(r&0x3|0x8) {即这意味着什么},而不是Console.WriteLine("The initial date is: ", In1.DisplayDate()); 的含义。

2 个答案:

答案 0 :(得分:3)

/[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,基数2为110(110)&(11)提取最低位,因此结果在基数2中为(10),在基数10中转换为2.因此分配了2。如果r&0x3的值为0,则|0x8部分会使其回退到0x8,即8。要了解详情,请阅读bitwise operators < / p>

总之,原始字符串xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx中的“x”和“y”是占位符,它会生成某种随机ID,例如b9e08d48-0dfc-4a27-ba77-4a94b363b311,将其替换为随机字符。

答案 1 :(得分:0)

到 2013 年,这个函数开始在 stackoverflow 上出现(例如 here)。如果您搜索关键字 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx',您可以在 stackoverflow 上轻松找到 20 次提及。

并试图进一步追溯,我能找到的最早提及是在 2011 年的 github 上,当时有人尝试寻找更短的函数。 (即here)。事实上,他提供的最后一个解决方案似乎更短,也可能更快。不过,您引用的版本是最受欢迎的版本。

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

npm install uuid

并用

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

here所述。