TIL 71 | JS 배열 안 중복 값의 위치를 모두 찾아내는 법 / index 함수의 매개변수 활용

Gom·2021년 4월 30일
0

JavaScript

목록 보기
17/22
post-thumbnail

배열 안에서 찾으려는 값 x가 여러 개라면?

배열 안에서 특정 값을 찾고자 할 때 일반적으로 최초로 발견되는 특정 값의 인덱스를 반환해준다.
특정 값이 하나이거나 단순히 포함 여부만을 알고 싶다면 상관없지만

특정 값이 여러 개일 때 중복 값의 모든 위치를 알고 싶다거나 총 몇 번 중복되는 지를 알고 싶을 수 있다.

이 때는 Method의 매개변수인 fromIndex를 활용하여 통상 하나의 인덱스만을 반환되는 특성을 보완할 수 있다.

fromIndex를 하나씩 늘려가는 반복문을 이용하여 배열 안에 들어있는 특정 요소의 위치를 모두 찾아내는 원리이다.

위치(index)를 찾아낼 수 있고 fromIndex 매개변수를 가지는 메소드는 두 가지이다.

indexOf(), findIndex()

fromIndex라는 매개변수를 활용하는 원리는 동일하므로 indexOf()로만 예시 코드를 작성할 것이다.

indexOf()와 findIndex() 중에는 해결하려는 문제와 더 적합한 방식을 골라 사용하면 된다.
바로 이전 글에서 이들을 비교해두었다.
TIL 68 | JavaScript 배열 내 특정 값 포함 여부 확인 / Array Method 비교

indexOf()를 활용하여 모든 위치 찾기

var indices = [];
var array = ['a', 'b', 'a', 'c', 'a', 'd'];
var element = 'a';
var idx = array.indexOf(element);
while (idx != -1) {
  indices.push(idx);
  idx = array.indexOf(element, idx + 1);
}
console.log(indices);
// [0, 2, 4]

예시 설명

array 내에서 'a'라는 요소를 모두 찾아보자.

단순한 array.indexOf('a')였다면 최초의 인덱스인 0만을 반환했겠지만
위 코드는 'a'요소가 더 이상 존재하지 않을 때까지 indexOf()를 반복 수행하도록 하고 있다.

while문의 조건은 'a'라는 요소가 배열안에 존재하지 않는다는 의미의 -1의 값이 반환될 때까지로 배열 안에 아직 'a'가 존재한다면 위치 찾기를 계속한다.

idx는 'a'라는 요소의 위치를 의미하는데 fromIndex 매개변수 부분에 idx+1을 적음으로써
'a'의 위치가 확인되면 그 옆자리부터 다시 탐색하게 한다.

profile
안 되는 이유보다 가능한 방법을 찾을래요

0개의 댓글