Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 배열에서 요소의 역방향 인덱스 찾기


이 글에서는 첫 번째 인수로 문자열(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). 이 방식 덕분에 배열을 복사하거나 실제로 뒤집지 않고도 최소한의 연산만으로 역방향 인덱스를 효율적으로 구할 수 있습니다.