Search
Duplicate

filter

생성일
2023/02/08 02:25
태그
JS

filter() 함수

Array.prototype.filter(callbackfn [, thisArg]);
JavaScript
복사
filter 메소드는 해석 그대로 걸러주는 역할을 하는 함수이다.
주로 특정 조건을 만족하는 새로운 배열을 필요로 할 때 사용하는 편이다
EMCA에는 “주어진 배열의 값들을 오름차순으로 접근해 call backfn을 통해 true를 반환하는 요소를 기준으로 신규 배열을 만들어 반환한다” 라고 정의되어있다
const number = [1, 2, 3, 4, 5]; const result = number.filter(number => number > 3); // filter를 통해 3보다 큰 수를 가진 값들을 걸러내는 방법 console.log(number); // [1, 2, 3, 4, 5] console.log(result); // [4, 5]
JavaScript
복사

filter() 사용법

callbackfn을 통해 주어진 3개의 인자(요소 값, index, 순회하는 대상 객체)를 사용해 Boolean값인 true, false 값을 반환하는 함수를 등록
const numbers = [1]; numbers.filter((number, index, source) => { // number : 요소값 // index : source에서 요소의 index // source : 순회하는 대상 console.log(number); // 1 console.log(index); // 0 console.log(source); // [1] return number > 3; });
JavaScript
복사
실무)
const guys = [ { name: 'YD', money: 500000 }, { name: 'Bill', money: 400000 }, { name: 'Andy', money: 300000 }, { name: 'Roky', money: 200000 } ]; const rich = guys.filter(man => man.money > 300000); console.log(rich); // [{ name: "YD", money: 500000 }]
JavaScript
복사
filter는 원시적인 값만 사용할 수 있는 것이 아니라, json과 같은 객체를 사용해 true를 판별할 수 있다
즉, filter는 js에서 사용할 수 있는 모든 형태의 값을 true 또는 false로 분류해 원하는 조건을 만족하는 새로운 배열을 반환할 수 있다
다른 함수와의 조합성도 좋아 map, reduce 같은 다른 함수와도 자주 쓰인다
ex) “300000 이상을 가진 사람들의 이름은?”
const guys = [ { name: 'YD', money: 500000 }, { name: 'Bill', money: 400000 }, { name: 'Andy', money: 300000 }, { name: 'Roky', money: 200000 } ]; const richNames = guys.filter(man => man.money > 300000) .map(man => man.name) console.log(richName); // ["YD", "Bill"]
JavaScript
복사

주의사항

filter 함수는 객체를 직접 사용하거나 변형시키지 않지만, callbackfn을 통해 수정할 수 있으며, 이는 문제를 발생시키는 원인이 된다
callbackfn이 호출되는 범위는 callbackfn이 처음 호출되기 전이며, filter는 순회하는 도중에 추가된 요소는 접근하지 않는다
반대로 순회하는 도중 수정이 일어나면 변경된 값이 callbackfn에 전달되고, 삭제된 요소는 접근하지 않는다
// array 요소가 추가되는 경우 const numbers = [1, 2, 3, 4, 5]; const result = numbers.filter(number => { numbers.push(number); return number > 3; }); console.log(result); // [4, 5] // array 요소가 수정되는 경우 const numbers = [1, 2, 3, 4, 5]; const result = number.filter(number => { numbers.pop(); return number > 3; }); console.log(result); // []
JavaScript
복사

reference