Skip to content

Commit

Permalink
feat: removeLastHangulCharacter 추가 (#56)
Browse files Browse the repository at this point in the history
* feat: removeLastHangulCharacter 추가

* Create smooth-tips-yawn.md

* chore: 테스트명을 함수 이름과 동일하게 변경
  • Loading branch information
evan-moon committed Apr 18, 2024
1 parent 7a624eb commit e25b8b5
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .changeset/smooth-tips-yawn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"es-hangul": minor
---

feat: removeLastHangulCharacter 추가
4 changes: 4 additions & 0 deletions src/_internal.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export function excludeLastElement(array: string[]): [string[], string] {
const lastElement = array.at(-1);
return [array.slice(0, -1), lastElement ?? ''];
}
15 changes: 15 additions & 0 deletions src/removeLastHangulCharacter.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { describe, it, expect } from 'vitest';
import { removeLastHangulCharacter } from './removeLastHangulCharacter';

describe('removeLastHangulCharacter', () => {
it('마지막 문자가 겹받침인 경우 홑받침으로 바꾼다', () => {
expect(removeLastHangulCharacter('안녕하세요 값')).toBe('안녕하세요 갑');
});
it('마지막 문자가 초성과 중성의 조합으로 끝날 경우 초성만 남긴다', () => {
expect(removeLastHangulCharacter('프론트엔드')).toBe('프론트엔ㄷ');
});
it('마지막 문자가 초성과 중성과 종성의 조합으로 끝날 경우 초성과 중성이 조합된 문자만 남긴다.', () => {
expect(removeLastHangulCharacter('일요일')).toBe('일요이');
expect(removeLastHangulCharacter('깎')).toBe('까');
});
});
42 changes: 42 additions & 0 deletions src/removeLastHangulCharacter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { combineHangulCharacter } from './combineHangulCharacter';
import { disassembleHangulToGroups } from './disassemble';
import { excludeLastElement } from './_internal';

/**
* @name removeLastHangulCharacter
* @description
* 인자로 주어진 한글 문자열에서 가장 마지막 문자 하나를 제거하여 반환합니다.
* ```typescript
* removeLastHangulCharacter(
* // 한글 문자열
* words: string
* ): string
* ```
* @example
* removeLastHangulCharacter('안녕하세요 값') // 안녕하세요 갑
* removeLastHangulCharacter('프론트엔드') // 프론트엔ㄷ
* removeLastHangulCharacter('일요일') // 일요이
*/
export function removeLastHangulCharacter(words: string) {
const disassembedGroups = disassembleHangulToGroups(words);
const lastCharacter = disassembedGroups.at(-1);

if (lastCharacter == null) {
return '';
}

const withoutLastCharacter = disassembedGroups
.filter(v => v !== lastCharacter)
.map(([first, middle, last]) => {
if (middle != null) {
return combineHangulCharacter(first, middle, last);
}

return first;
});

const [[first, middle, last]] = excludeLastElement(lastCharacter);
const result = middle != null ? combineHangulCharacter(first, middle, last) : first;

return [...withoutLastCharacter, result].join('');
}

0 comments on commit e25b8b5

Please sign in to comment.