티스토리 뷰
728x90
velog 블로그에서 tistory로 이전한 데이터 입니다. 2020-12-2
도입
네이버 FE 면접에서 url query를 파싱하는 방법에 대해 물어봤던 적이 있다.
아마 뛰어난 분들은 잘 하시겠지만 간단하게 만드시는 분들도 많을 것이다.
당시에 나는 어떻게 했을까?
내 풀이
문제 예시: key=123&name=djlee&address=suwon
결과 : {key: "123", name: "djlee", address: "suwon"}
function queryParsing(str) {
const result = {};
const arr = str.split('&');
arr.forEach(sub => {
const [key,value] = sub.split('=');
result[key] = value;
});
return result;
}
고민사항
array가 들어왔을 땐, 그리고 한글일 땐?
어떻게 할까?
다시 풀어보자
- array에 한글 포함 경우 (제약사항: query 배열을 받는 경우가 다양하기에 예시와 다를 수 있다. )
예시: page=1&sort=newest&language=%ED%95%9C%EA%B5%AD%EC%96%B4%2C%EC%A4%91%EA%B5%AD%EC%96%B4%2C%EC%98%81%EC%96%B4 앞전 코드로의 결과 : {page: "1", sort: "newest", language: "%ED%95%9C%EA%B5%AD%EC%96%B4%2C%EC%A4%91%EA%B5%AD%EC%96%B4%2C%EC%98%81%EC%96%B4"} 아래 코드로의 결과 : {page: "1", sort: "newest", language: Array(3)} > language: (3) ["한국어", "중국어", "영어"]
function queryParsing(str) {
const decodedQuery = decodeURIComponent(str);
const result = {};
const arr = decodedQuery.split('&');
arr.forEach(sub => {
const [key,values] = sub.split('=');
const arrValue = values.split(',');
result[key] = arrValue.length > 1 ? arrValue: values;
});
return result;
}
결과가 잘 들어온다. 하지만 Object result에 바로 들어가는 게 맘에 들지 않는다.
## 개선하기
function queryParsing(str) {
const decodedQuery = decodeURIComponent(str);
const result = new Map();
const arr = decodedQuery.split('&');
arr.forEach(sub => {
const [key,values] = sub.split('=');
const arrValue = values.split(',');
result.set(key,arrValue.length > 1 ? arrValue: values);
});
return Object.fromEntries(result);
}
fromEntries는 node v12 부터 지원하기 때문에 MDN 문서도 자주 읽어서 이해하자.
## 결론
보통은 axios나 parser가 적용된 express를 사용하다보면 파싱을 따로 안해도 결과를 받아올 수가 있다.
하지만 문제를 풀어야 하는 입장에서 주워진다면 어떻게 할지 고민해 보는것도 좋은 것 같다.
내 풀이가 좋다고는 말할 수 없다. 따라서 좋은 생각이 있는 분이 댓글을 남겨주시면 보고 배우고 싶다.
반응형
'CS > Client' 카테고리의 다른 글
PUT vs PATCH (0) | 2023.10.13 |
---|---|
URLSearchParams를 사용하자 (0) | 2023.10.08 |
Object에 Property 설정 시 성능 고민하기 (0) | 2023.10.08 |
HTML과 URLs (0) | 2023.10.08 |
디자인 시스템 (0) | 2022.05.09 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- nodejs 버전 관리
- application/x-www-form-urlencoded
- nodejs
- JRE
- 트랜잭션
- 콘웨이법칙
- UI/UX
- SSAFY 퇴소
- 소프트웨어개발프로세스
- 개발프로세스
- PUT vs POST
- 클린코드
- 필수단어
- 너디너리데모데이
- HTTP
- AntPattern
- 동기/비동기
- S3
- 2022년 회고
- charset
- SSAFY 특화프로젝트 회고
- 블로킹/논블로킹
- Content-Type
- 점진적개선
- 디자인시스템
- 자바기초
- PresignedURL
- LTS 개선
- 개발기록
- 디미터법칙
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함