find와 filter는 사용하는 방법, 메커니즘은 동일하다. 다만 return값이 다른데 find의 경우에는 조건을 만족하는 최초의 값을 찾아 반환하고 filter의 경우에는 조건에 만족하는 모든 값을 배열의 형태로 반환해준다.
두 함수 모두 함수의 대상이 되는 배열의 상태를 변화시키지 않는 함수이다. (arr.find() , arr.filter()를 해도 arr는 변화가 없음)
find와 filter는 모두 인자로 콜백 함수를 넘겨주면 된다. 콜백함수의 인자는 조건 검사의 대상이 되는 배열의 값이 순서대로 넘어가고 return 값은 true false로 결정될 수 있는 조건식이 들어가면 된다. 아래의 코드 블록을 보면 이해가 쉽다.
const arr1 = [1,2,3,4,5,1]
// const arr2 = arr.find( function(val){return val == 1} )
const arr2 = arr.find( (val) => val == 1 )
const arr3 = arr.filter( (val) => val == 1 )
console.log(arr2) // 1
console.log(arr3) // [1,1]
const arr4 = arr.find( x => x == 2 )
const arr5 = arr.filter( x => x == 2 )
console.log(arr4) // 2
console.log(arr5) // [2]
console.log(typeof arr4) // number
console.log(typeof arr5) // object
위 코드는 설명을 위해 간단하게 1,2,3,4,5,1을 가진 배열 arr과 find와 filter를 이용해서 arr2~arr5를 만들었다.
arr2는 값이 1과 같은 값을 찾는데, 첫번째 값만 return해주기 때문에 arr2는 1이라는 리터럴을 갖는 것을 알 수 있다.
(첫 번째 return을 찾고 반환을 하면 검색을 멈춘다)
arr3의 경우는 arr2와 같은 조건으로 찾아내지만 filter를 이용했기 때문에 배열로 return값을 준 것을 알 수 있다.
(모든 값을 순회하면서 찾기 때문에 배열의 길이만큼 동작)
arr4와 arr5을 통해 find와 filter로 찾아낸 값이 각각 하나의 value와 배열인 것을 확인할 수 있었다.
그럼 다음 예제를 풀어보면서 find와 filter에 대해서 익숙해져 보도록 하자
find 함수 예제
1. 속성 중 하나를 사용하여 배열에서 객체 찾기
let inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
];
위 배열에서 chrries만 찾아서 출력하기
2. 배열에서 소수 찾기
let arr = [4, 5, 6, 8, 9]
위 배열에서 소수인 것 중 첫번째 인자 출력
답 : 5
filter 함수 예제
1. 모든 작은 값 걸러내기
const arr = [12,54,32,1,6,53,4]
위 arr에서 10이하인 수만 걸러내서 새로운 배열을 받아 출력해보기
답 : [1, 6, 4]
2. JSON에서 무효한 항목 거르기
let arr = [
{ id: 15 },
{ id: -1 },
{ id: 0 },
{ id: 3 },
{ id: 12.2 },
{ },
{ id: null },
{ id: NaN },
{ id: 'undefined' }
];
let invalidEntries = 0;
위와 같이 JSON obj를 갖고 있는 array가 주어졌을 때 JSON의 id 값을 검사해서 id의 값이 유효하지 않은 값일때만 invalidEntries의 값을 더해주어 arr 안에 유효한 객체가 총 몇개 있는지 검사하는 로직을 완성시키기
답 : 유효한 객체 배열 = [ { id : 15 }, { id : -1 }, { id : 3 }, { id : 12.2 } ]
invalidEntries = 5;
'Front-end > js' 카테고리의 다른 글
불변 Object 만들기 (0) | 2021.12.22 |
---|---|
ArrayFunction3 (forEach) (0) | 2021.12.21 |
Array Function 1 (Map) (0) | 2021.12.13 |
유용한 Array 함수들 (0) | 2021.12.08 |
3자리 마다 콤마찍기 (0) | 2021.12.03 |