정수 배열을 첫 번째이자 유일한 인자로 받는 JavaScript 함수를 작성해야 합니다.
문제 개요
이 함수는 원본 배열에서 특정 조건을 만족하는 요소들만 골라 새로운 배열을 구성한 뒤 반환해야 합니다. 여기서 조건이란, 어떤 요소 num에 대해 그 바로 앞의 값(num - 1)과 바로 뒤의 값(num + 1)이 모두 배열 안에 존재해야 한다는 것입니다.
즉, num - 1과 num + 1이 모두 원본 배열에 있을 때에만 해당 요소를 결과 배열에 포함하고, 그렇지 않은 경우에는 제외합니다.
예제
예를 들어 입력 배열이 다음과 같다고 가정해 보겠습니다.
const arr = [4, 6, 8, 1, 9, 7, 5, 12];
각 요소를 검사해 보면 6(5와 7 존재), 8(7과 9 존재), 7(6과 8 존재), 5(4와 6 존재)만 조건을 만족하므로 출력은 다음과 같습니다.
const output = [ 6, 8, 7, 5 ];
구현 코드
위 문제를 해결하는 코드는 다음과 같습니다.
const arr = [4, 6, 8, 1, 9, 7, 5, 12];
const pickMiddleElements = (arr = []) => {
const res = [];
for(let i = 0; i < arr.length; i++){
const num = arr[i];
const hasBefore = arr.includes(num - 1);
const hasAfter = arr.includes(num + 1);
if(hasBefore && hasAfter){
res.push(num);
};
};
return res;
};
console.log(pickMiddleElements(arr));
코드 설명
- pickMiddleElements: 기본값으로 빈 배열을 갖는 화살표 함수입니다.
- for 반복문을 사용해 배열의 각 요소를 하나씩 순회합니다.
- arr.includes() 메서드를 활용해 현재 요소보다 1 작은 값과 1 큰 값이 배열에 존재하는지 검사합니다.
- 두 값이 모두 존재하면 push()로 해당 요소를 결과 배열에 추가합니다.
- 모든 요소의 검사가 끝나면 최종 결과 배열을 반환합니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[ 6, 8, 7, 5 ]