배열 안에서 특정 값을 찾고자 할 때 일반적으로 최초로 발견되는 특정 값의 인덱스를 반환해준다.
특정 값이 하나이거나 단순히 포함 여부만을 알고 싶다면 상관없지만
특정 값이 여러 개일 때 중복 값의 모든 위치를 알고 싶다거나 총 몇 번 중복되는 지를 알고 싶을 수 있다.
이 때는 Method의 매개변수인 fromIndex를 활용하여 통상 하나의 인덱스만을 반환되는 특성을 보완할 수 있다.
fromIndex를 하나씩 늘려가는 반복문을 이용하여 배열 안에 들어있는 특정 요소의 위치를 모두 찾아내는 원리이다.
위치(index)를 찾아낼 수 있고 fromIndex 매개변수를 가지는 메소드는 두 가지이다.
indexOf(), findIndex()
fromIndex라는 매개변수를 활용하는 원리는 동일하므로 indexOf()로만 예시 코드를 작성할 것이다.
indexOf()와 findIndex() 중에는 해결하려는 문제와 더 적합한 방식을 골라 사용하면 된다.
바로 이전 글에서 이들을 비교해두었다.
TIL 68 | JavaScript 배열 내 특정 값 포함 여부 확인 / Array Method 비교
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'의 위치가 확인되면 그 옆자리부터 다시 탐색하게 한다.