이 글에서는 첫 번째 인수로 문자열(String) 또는 숫자(Number) 리터럴로 이루어진 배열을, 두 번째 인수로 문자열 또는 숫자 하나를 받는 자바스크립트 함수를 작성하는 방법을 알아보겠습니다.
두 번째 인수로 전달된 값이 배열에 존재하지 않으면 함수는 -1을 반환해야 합니다.
반대로 값이 배열에 존재한다면, 배열을 실제로 뒤집지 않은 상태에서 해당 값이 뒤집힌 배열에서 차지하게 될 인덱스를 계산해 반환해야 합니다.
마지막으로 이 함수를 Array.prototype 객체에 추가하여 어떤 배열에서든 호출할 수 있도록 확장해야 합니다.
동작 예시
예를 들어 다음과 같습니다 −
[45, 74, 34, 32, 23, 65].reversedIndexOf(23); // 1을 반환 → 배열이 뒤집히면 23은 인덱스 1의 자리에 위치하기 때문
예제 코드
다음은 위 요구 사항을 구현한 코드입니다 −
const arr = [45, 74, 34, 32, 23, 65];
const num = 23;
const reversedIndexOf = function(num){
const { length } = this;
const ind = this.indexOf(num);
if(ind === -1){
return -1;
};
return length - ind - 1;
};
Array.prototype.reversedIndexOf = reversedIndexOf;
console.log(arr.reversedIndexOf(num));출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다 −
1
코드 동작 원리
핵심은 length - ind - 1이라는 간단한 수식입니다. 원본 배열에서 요소의 인덱스가 ind라면, 배열을 뒤집었을 때 그 요소가 가지게 될 새로운 인덱스는 (배열 길이 − 기존 인덱스 − 1)이 됩니다. 예를 들어 길이가 6인 배열에서 인덱스 4에 있는 요소는 뒤집힌 후 인덱스 1에 위치하게 됩니다(6 − 4 − 1 = 1). 이 방식 덕분에 배열을 복사하거나 실제로 뒤집지 않고도 최소한의 연산만으로 역방향 인덱스를 효율적으로 구할 수 있습니다.