알고리즘을 풀거나 서버에서 받은 데이터를 가공하여 사용할 때나 배열 안에 특정 값을 찾아야 하는 경우가 많다. 특정 값이 포함되어 있는 지 확인할 수 있는 배열 함수들을 정리하고 비교해보려한다.
배열 내 특정 값 포함 여부 확인할 수 있는 함수에는 아래와 같은 것들이 있는데 for문을 이용해서 확인할 수도 있다. 기능을 수행할 수 있는 방식이 다양하기 때문에 현 상황에 가장 적합한 함수를 선택하는 것이 관건이다. 그러므로 간단 요약을 통한 선비교 후설명을 진행하겠다.
🔽🔽🔽🔽🔽
: 찾으려는 값과 일치하는 '첫번째 index'를 반환
: 특정 값 포함 '여부(boolean)' 반환 💥IE호환❌
: callback함수 조건에 충족하는 값의 '첫번째 index'를 반환 💥IE호환❌
: callback함수 조건에 충족하는 값의 포함 '여부(boolean)' 반환
🔼🔼🔼🔼🔼
: 필요한 정보가 위치인지 포함 여부인지에 따라 의도에 알맞는 함수를 이용한다.
indexOf()와 includes()의 performance를 검색해 얻은 결과 중 스택오버플로우에서 인사이트를 얻었다. 속도는 indexOf가 약간 더 빠를 수 있지만 의도를 명확히 할 수 있는 함수를 사용하라는 것이었다.
내가 생각하기에도 좋은 코드란 읽기 좋은 코드이고 읽기 좋은 코드란 코드의 의도를 쉽게 파악할 수 있는 것이므로 의도에 맞는 함수를 이용하는 것이 더 중요하게 느껴진다.
: 원시타입의 경우는 indexOf()와 inxludes()로도 비교가 가능하지만
만약 Object를 비교해야 한다면 다른 메소드를 이용하는 것이 좋다. 객체 특성 상 값이 동일하더라도 참조 위치가 다를 때 서로 다른 값으로 인식하기 때문이다. Object를 비교하고자 할 때는 findIndex()와 some() 함수의 callback함수 조건을 활용해야 한다.
: IE 지원을 하지 않는 함수가 생각보다 많다는 것을 알게 되었다. 사용 전에 잘 확인해야겠다. 스택오버플로우에서도 제시되는 답안마다 이 함수는 IE지원이 안되는데요! 식의 댓글이 많아서 웃펐다..
indexOf()
arr.indexOf(searchElement[, fromIndex])
searchElement 탐색할 요소
fromIndex Optional 검색을 시작할 위치, 기본값은 0이다(index 0부터 전체 배열 검색).
ex) fromIndex가 음수일 때 배열 끝에서부터 오프셋 값으로 반영
const array = [2, 9, 9];
array.indexOf(2, -1); // -1
array.indexOf(9, -1); // 2
array.indexOf(9, -2); // 1
array.indexOf(2, -3); // 0
배열 내의 요소의 최초의 인덱스. 발견되지 않으면 -1
includes()
arr.includes(valueToFind[, fromIndex])
valueToFind 탐색할 요소
fromIndex Optional 검색을 시작할 위치, 기본값은 0이다(index 0부터 전체 배열 검색).
ex) array.length + fromIndex(음수) 계산된 인덱스가 -1 * array.length 보다 작거나 같다면, 전체 배열이 검색
// array length is 3
// fromIndex is -100
// computed index is 3 + (-100) = -97
const arr = ['a', 'b', 'c'];
arr.includes('a', -100); // true
arr.includes('b', -100); // true
arr.includes('c', -100); // true
arr.includes('a', -2); // false
Boolean.
findIndex()
arr.findIndex(callback(element[, index[, array]])[, thisArg])
callback 3개의 인수를 취하여 배열의 각 값에 대해 실행할 함수
element 배열 요소 중 현재 처리 중인 요소 (배열 내 각 값을 의미)
index 현재 처리중인 요소의 인덱스
array findIndex 함수가 호출된 배열
thisArg 선택 사항. 콜백을 실행할 때 this로 사용할 객체
callback 함수를 만족하는 배열의 첫 번째 요소에 대한 인덱스, 발견되지 않으면 -1
➕ 값을 반환하는 메소드로 find()가 있다. 발견되지 않으면 undefined
some()
arr.some(callback[, thisArg])
callback 각 요소를 시험할 함수
currentValue 처리할 현재 요소
index Optional 처리할 현재 요소의 인덱스
array Optional some을 호출한 배열
thisArg Optional callback을 실행할 때 this로 사용하는 값
callback이 배열 요소 중 하나라도 참인(truthy) 값을 반환하는 경우 true
모든 값에서 거짓을 반환하면 false
참고자료 : MDN