티스토리 뷰
JavaScript 배열 안에 특정한 값을 찾을 때 사용하기 좋은 find 메소드 (ES6)
Yolo진우 2019. 2. 16. 11:40
우리는 작업을 하다보면 많은 값들을 찾고 그 상황에 맞게 값을 변경 또는 삭제를 한다.
ES5에서는 주로 Array.prototype.foreach(), Array.prototype.map(), Array.prototype.filter() 를 사용하여 특정 또는 전체 값에 대한 처리를 했다. 처리를 하는 도중 이 모든 함수는 한 배열 안에 있는 모든 데이터를 확인 한 후 변경 및 삭제를 한다.
하지만 이들의 단점 아닌 단점은 어떤 하나의 특정 값만 바꾸려고 하는데 모든 데이터를 확인 한다는 점이다. 배열이 작을 때는 속도 차이가 크게 없지만 배열의 데이터가 클 때 아무래도 모든 데이터를 확인하면서 처리하다 보니 속도가 낮아지는 현상을 볼 수 있다. 그래서 어떤 하나의 값만 찾아서 값을 변경 할 때 ES6에 나온 Array.prototype.find()라는 함수를 유용하게 사용중이다. 이에 대해서 알아보자.
Mozila에서는 Array.prototype.find()를 "주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환하며 값이 없을 때는 undefiend를 반환" 이라고 써져있으며, 아래와 같이 사용 가능하다.
만약 내가 [1, 2, 3, 4, 5] 라는 배열에 3 라는 숫자를 찾고 싶다고 했을 때 아래와 같이 사용할 수 있다.
여기서 잠깐 ! 보셨는지 몰라도 반환 하는 데이터 타입이 틀리다.
Array.prototype.filter()는 반환 값이 Array이고, Array.prototype.find()는 반환 값이 해당하는 값 (Number)로 값을 반환하기 때문에 서로의 출력 값이 틀린 것이다.
이제 더 재밌는 실험을 해보자.
만약 [1, 2, 3, 4, 5] 라는 배열에 3 라는 숫자를 찾고 싶다고 똑같이 가정한 후 count 라는 변수를 사용하여 얼마나 카운트 되는지 확인해보자 !
첫 번째로 Array.prototype.filter()를 사용 했을 때이다.
위에서 확인 할 수 있듯이 내가 찾고 싶은 값을 찾은 후에도 필요 없는 확인을 끝까지 한다. 즉 count는 arrayData의 length 만큼 출력이 된다.
이제 두 번째로 Array.prototype.find()를 사용 했을 때이다.
Array.prototype.find()를 사용하면 필요한 값을 찾고 찾은 즉시 바로 빠져나온다. 이게 예제와 같이 적은 데이터를 처리할 때에는 속도 차이가 없겠지만 직접 몇가지 데이터를 측정해본 결과 큰 데이터를 처리할 때 확실한 속도 차이를 볼 수 있었다.
하지만 Array.prototype.find()를 지원하는 브라우저가 많지 않기 때문에 babel과 같은 transpiler를 이용하여 ES5 지원 코드로 변환하여 사용해야 한다. 그리고 단점은 하나가 아닌 여러개의 데이터를 찾을 때에는 활용하기 어려운 것 같다.
긴글 읽어주셔서 감사합니다.
오늘도 해피 코딩하세요 !
'넌 누구야 JavaScript 공부 > JavaScript' 카테고리의 다른 글
JavaScript Rest parametor, Spread (ES6) (0) | 2019.02.25 |
---|---|
JavaScript 프로토타입 기반의 함수 Class (ES6) (0) | 2019.02.22 |
JavaScript 새로운 문자열 표기법 template literals (ES6) (0) | 2019.02.21 |
JavaScript arrow function 비밀을 파헤쳐보자 (ES6) (0) | 2019.02.20 |
JavaScript let, const 란? 그리고 왜 써야만 하는가? (ES6) (5) | 2019.02.19 |
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- window
- 함수 컴포넌트
- array
- JavaScript
- this
- scope
- Let
- 리엑트
- class component
- HTML
- const
- useEffect
- ES6
- Function Component
- 깃헙
- NestJS
- github
- 클래스형 컴포넌트
- useState
- Angular
- Es5
- react
- Prototype
- 클래스 컴포넌트
- 웹사이트
- TypeScript
- 가상돔
- website
- string
- virtual dom
- Total
- Today
- Yesterday