<아스키 코드 차트>
https://www.ascii-code.com/codechart
날짜를 선택하면 랜덤으로 이름을 생성해주는 로직을 짜야했는데
말이 랜덤이지 날짜+이전에 존재하는 알파벳의 다음 알파벳
조합이라서 어떻게 할지 고민하다가 아스키코드를 사용해보기로 했다.
const generateUniqueName = (baseName, existingNames) => {
let code = 65;
let suffix = String.fromCharCode(code);
while (existingNames.some((o) => o.name === `${baseName}_${suffix}`)) {
code++;
suffix = String.fromCharCode(code);
}
return `${baseName}_${suffix}`;
};
// 사용
const generatedName = generateUniqueName(`${currentName}_${format(new Date(), "yyMMdd")}`, tempData);
1. 함수에 인자로 basename과, 이미 존재하는 이름들로 이루어진 배열(existingNames)을 담는다.
2. 시작은 무조건 A(=65)로 시작.
3. suffix라는 값을 65를 아스키코드 변환한 값으로 만든다. ( 65 => A)
4. 이미 존재하는 이름들의 배열을 돌면서, 이미 이 이름이 존재하는 한(some), 계속 반복문을 돌리며 ASCII 코드 값을 +1씩 올린다.
5. 이름이 존재 하지 않을때, 최종값으로 return 한다.
6. 현재 이름과 현재 날짜(선택한 날짜)를 baseName으로 만들어서 이름이 들어있는 배열과 함께 함수를 사용한다.
왜 ASCII 코드라는게 있는지 사실 의아했는데 사용해보니 정말 존재해줘서 고맙다..ㅠㅠ
+) To-be
- 사실 이름의 갯수가 알파벳 갯수보다 많아지면 AA,AB 이런식으로 늘리는 로직도 구현해야 하지만
현재 시스템에서 그렇게 길어질 일이 없다고 판단했고 뒤에 다른 개발이 급해서 따로 예외처리는 넣지 않았다.
나중에 꼭 구현해야겠다.