[javascript] 배열 검색하기

배열 요소에 인자와 일치하는 값이 있으면, 해당 위치의 인덱스를 얻을 수 있습니다.

검색은 앞에서 부터 순차적으로 진행됩니다.되며, 

검색해야할 범위를 알 경우, 검색 시작 위치를 지정하거나, 끝에서 부터 역순으로 검색할 수도 있습니다.

Array.indexOf(검색값, 시작인덱스);

Array.lastIndexOf(검색값, 시작인덱스);

검색값 위치를 얻기

const arr1 = ['펭수', '라이언', '어피치', '콘', '브라운', '무지'];
const index = arr1.indexOf('라이언'); // 1 리턴됨
console.log(index);
console.log(arr1.indexOf('라이언', index+1)); // 위치 2부터 검색하므로 -1 리턴됨
console.log(arr1.lastIndexOf('라이언')); // 1 리턴됨

검색값이 나오는 횟수를 알기

두번째 인자인 검색 시작 위치를 활용하면 검색값이 배열 안에 검색값이 몇개 나오는지 셀 수 있습니다.

const arr2 = ['펭수', '라이언', '어피치', '콘', '브라운', '무지', '라이언', '어피치', '콘', '콘'];
let index = -1;
let count = 0;
do{
  index = arr2.indexOf('라이언', index+1); // 마지막 찾은 배열 인덱스 다음 위치부터 다시 검색
   count += index >= 0 ? 1:0;
}while(index >= 0);
console.log(count);

검색값이 나오는 모든 배열 위치 인덱스를 얻기

검색값이 나오는 횟수를 얻는 방법을 확장하면 검색값의 모든 위치를 가진 배열을 생성할 수 있습니다.

가져온 위치값 배열을 활용해 요소의 값을 변경하거나, 계산식을 적용하는 추가의 작업을 할 수 있습니다.

const arr3 = ['펭수', '라이언', '어피치', '콘', '브라운', '무지', '라이언', '어피치', '콘', '콘'];
let index = -1;
let arr_found = [];
do{
  index = arr3.indexOf('콘', index+1); // 마지막 찾은 배열 인덱스 다음 위치부터 다시 검색
  if(index >= 0){
    arr_found.push(index);
  }
}while(index >= 0);
console.log(arr_found);

검색된 모든 배열 요소를 변경하기

검색값이 나오는 모든 배열 인덱스를 얻는 방법을 활용해 검색값이 나오는 배열 요소의 값을 변경할 수 있습니다.

const arr4 = ['펭수', '라이언', '어피치', '콘', '브라운', '무지', '라이언', '어피치', '콘', '콘'];
let index = -1;
do{
  index = arr4.indexOf('콘', index+1); // 마지막 찾은 배열 인덱스 다음 위치부터 다시 검색
  arr4[index] = '네온';
}while(index >= 0);
console.log(arr4);