JavaScript에서 문자열 배열을 다루다 보면, 배열을 정렬한 뒤 특정 형식으로 가공해야 하는 경우가 자주 있습니다. 이번 글에서는 문자열 배열을 알파벳순으로 정렬하고, 정렬 결과 중 가장 앞선 문자열의 각 문자 사이에 '***' 구분자를 삽입하는 방법을 알아보겠습니다.
문제 설명
문자열 배열을 인수로 받는 JavaScript 함수를 작성해야 합니다.
이 함수는 다음과 같은 작업을 수행해야 합니다.
- 배열의 요소들을 알파벳순(사전순)으로 정렬합니다.
- 정렬된 배열에서 첫 번째 문자열을 선택합니다.
- 선택된 문자열의 각 문자 사이에 '***'를 삽입한 결과를 반환합니다.
풀이 코드
다음은 위 문제를 해결하는 코드입니다.
const arr = ['this', 'is', 'some', 'string', 'array'];
const specialSort = (arr = '') => {
const copy = arr.slice();
copy.sort();
const el = copy[0];
const res = el
.split('')
.join('***');
return res;
};
console.log(specialSort(arr));출력 결과
a***r***r***a***y
코드 동작 원리
- 원본 보호:
arr.slice()를 사용해 원본 배열의 복사본을 만듭니다. JavaScript의sort()메서드는 기존 배열을 직접 변경(mutation)하기 때문에, 원본 데이터를 유지하려면 복사본을 만드는 것이 안전합니다. - 알파벳순 정렬:
copy.sort()는 배열 요소를 문자열로 변환한 뒤 유니코드 순서(기본적으로 알파벳순)에 따라 정렬합니다. 따라서 배열은['array', 'is', 'some', 'string', 'this']가 됩니다. - 첫 번째 요소 선택: 정렬 후
copy[0]은 사전순으로 가장 앞선 문자열인'array'입니다. - 구분자 삽입:
split('')으로 문자열을 한 글자씩 분리한 배열로 만들고,join('***')으로 각 문자를 '***'로 연결하여 최종 결과를 생성합니다.
참고: 더 견고한 정렬이 필요하다면
대소문자가 섞인 문자열이나 한글 등 비 ASCII 문자가 포함될 가능성이 있다면, 정렬 시 localeCompare를 활용하는 편이 더 안정적입니다.
copy.sort((a, b) => a.localeCompare(b));
이처럼 slice(), sort(), split(), join()만 조합하면 별도의 반복문 없이도 간결하게 원하는 형식의 문자열을 만들 수 있습니다.