[재귀함수]
함수에서 자기 자신을 다시 호출해 작업을 수행하는 방식이다. 특정 분기까지 자기 자신을 계속해서 호출하는데, 주로 반복문을 구현할 때 사용한다.
[목표]
api응답으로 String 형태의 객체 안에 3개의 배열을 받아온다. 그중 각 배열의 첫 번째 요소만 사용하되 이미 동일한 내용이 있으면 그다음 요소 저장하도록 하는 걸 구현하고 싶다.
간단하게 설명하면 [a,b,c] [a, b, c] [d, e, f] 면 [a, b, d] 저장하는 식으로!
근데 String 형태이기 때문에 json 파싱이 안되서 match를 통해 원하는 정보를 빼주고 이전의 정보와 비교하면서 같은 게 있으면 다음 match로 넘아가는 방법으로 코드를 짜 주었다.
[구현]
if (fileList) {
const checkHasFile = [];
function checkFile(match, index) {
const filename = match[index + 1].trim();
const fileId = match[index + 2].trim();
if (!checkHasFile.includes(filename)) {
checkHasFile.push(filename);
return {
filename: filename,
fileId: docId
};
}
return checkFile(match, index + 2);
}
fileList.forEach(function(file) {
let result;
if (typeof file.meta_description === "string") {
const regex = /filename:\s*([^,]+),.*?fileId:\s*([^{,]+)/g;
let match = regex.exec(file.meta_description);
if (match != null) {
result = checkFile(match, 0);
}
}
});
}
- fileList 에는 Array(3) 이 있다.
- 각각의 배열을 돌면서 match에 조건에 맞는 내용을 담아준다.
- 동일한 파일이름을 가지고 있는 것이 있나 확인하러 checkFile 함수를 탄다.
- checkFile에서는 checkHasFile에 같은 filename 이 있나 확인한다.
- 없다면 checkHasFile에 넣어 다음 파일과 비교할 비교군을 만들어 주고 result에 값을 담아 return 한다.
- 있다면 다시 index를 높여 하여 다음 match와 비교하여 반복한다.
'Front > javascript' 카테고리의 다른 글
[Javascript] 클릭해서 드래그로 가로 스크롤 구현 하기 (click and drag) (0) | 2024.12.23 |
---|---|
[Javascript] scrollHeight 와 clientHeight 에 대해 알아보자 (3) | 2024.11.11 |
setInterval 을 알아보자 (0) | 2024.10.29 |
JS spread operator 스프레드 연산자(...) (1) | 2024.07.03 |
[Javascript] 요소를 복사하여 사용하기 - JS clone (0) | 2024.06.28 |