Date()
를 사용할 때 옵션을 추가하면, 원하는 날짜 스트링 형식을 훨씬 간결하고 빠르게 구현할 수 있다.
이번 과제를 하면서 간단하지만, 테스트 코드
를 작성해보았다.
(자주 쓰지 않으면 금방 까먹게 된다. 테스트 코드도 계속 공부해야겠다💪)
입력데이터의 형식은 “숫자,숫자,숫자…” (예> 1,2,3,4) 이렇게만 보고 정렬은 간단하군!
복잡하게 생각하지 말고 구현이 쉬운 버블 정렬을 선택했는데...
회고록을 쓰면서 성능이 더 좋은 정렬 알고리즘을 구현했어야 했나...? 싶은 마음이 든다.😥
> 정렬 알고리즘 시간복잡도
1. 타이머
2. 입력
3. 시작 버튼 및 결과
setInterval()
함수를 통해 new Date()
를 1초마다 다시 받아온다.dateLocalFunc()
함수를 생성하여 보여줘야 할 지역시간 표기법으로 변경한다.toLocaleString()
: 사용자의 문화권에 맞는 시간표기법으로 년,월,일 시간을 리턴한다.⭐ toLocaleString
함수 사용할 때, 아래처럼 다양한 옵션이 있는지 몰랐다.
옵션만 잘 사용해도 나중에 날짜 관련 코드 짜는 데 많은 도움이 될 것 같다!!
참고 - MDN - Intl.DateTimeFormat() constructor
`weekday`
- "long" (e.g., Thursday) / "short" (e.g., Thu) / "narrow" (e.g., T).
`year`
- "numeric" (e.g., 2012) / "2-digit" (e.g., 12)
`month`
- "numeric" (e.g., 2) / "2-digit" (e.g., 02) / "long" (e.g., March) / "short" (e.g., Mar) / "narrow" (e.g., M)
`day`
- "numeric" (e.g., 1) / "2-digit" (e.g., 01)
`timeZone`
- The time zone to use.
- The only value implementations must recognize is "UTC"; the default is the runtime's default time zone.
- Implementations may also recognize the time zone names of the IANA time zone database, such as "Asia/Shanghai", "Asia/Kolkata", "America/New_York".
정규식으로 “숫자,숫자,숫자…”만 허용되고, 그 외는 에러로 간주하여 시작버튼을 누를 수 없도록 하였다.
그런데 결과값에는 공백이 포함되어 있고, “숫자,숫자,숫자…”만 입력하기엔 사용자가 공백을 입력하는 경우도 있을 것 같아 정규식에 콤마 "," 앞 뒤로 공백을 허용하도록 변경하였다.
정규식이 맞게 되는지 확인을 위해 테스트 코드를 작성하여 확인했다.
// 정규 표현식
const inputRegEx = /^(([0-9])+[\s]?,[\s]?)*([0-9]+)$/;
stringToArray()
함수로 입력된 값을 콤마"," 기준으로 나누고, 모든 요소를 숫자로 변환한 배열 값을 반환시킨다.bubbleSort(값, 정렬방식)
에 따라 정렬되도록 함수를 실행시킨다.Promise
를 사용하였다.new Promise((resolve, _reject) => {
// 오름차순 로직 구현
setTimeout(() => {
resolve();
}, 3000);
}).then(() => {
// 내림차순 로직 구현
});
disabled
시켰다.Loading...
텍스트를 보여준다.