算法——生成独一无二的标识符

本文最后更新于:2025年1月29日 凌晨

153. uglify CSS class names

如果你在项目中使用了css-loader, 你可以像这样通过localIdentName来变换class name。

1
localIdentName: "[path][name]__[local]--[hash:base64:5]",

你也可以传入自定义的getLocalIdent函数来自由生成class name。

请完成一个class name生成函数 并满足以下要求

  1. 仅使用字母: a - z , A - Z
  2. 调用一次返回一个类名
  3. 返回的类名序列需要满足: 先短后长,相同长度按照字母排序(小写字母优先)
  4. 同时提供一个reset函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
getUniqueClassName()
// 'a'

getUniqueClassName()
// 'b'

getUniqueClassName()
// 'c'

// skip cases till 'Y'

getUniqueClassName()
// 'Z'

getUniqueClassName()
// 'aa'

getUniqueClassName()
// 'ab'

getUniqueClassName()
// 'ac'

// skip more cases

getUniqueClassName()
// 'ZZ'

getUniqueClassName()
// 'aaa'

getUniqueClassName()
// 'aab'

getUniqueClassName()
// 'aac'

getUniqueClassName.reset()

getUniqueClassName()
// 'a'

ans:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

let id = 0;
const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';


/**
* @returns {string}
*/
function getUniqueClassName() {
// your code here
let className = "";
let num = id++;
while(num >= 0) {
className = chars[num % chars.length] + className; // 通过余数获取当前字符, 理解为52进制转为十进制
num = Math.floor(num / chars.length) - 1; // 长短
}
return className;
}

getUniqueClassName.reset = function() {
// your code here
id = 0;
}

算法——生成独一无二的标识符
https://hercules11.github.io/blog/2021/12/16/算法——生成独一无二的标识符/
作者
wxc
发布于
2021年12月16日
许可协议