[javascript] filter()와 map()
2022. 6. 4. 18:38ㆍ프론트엔드/JavaScript
반응형
filter()
Array.prototype.filter()
- 메서드
- 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환한다.
- map, filter, reduce는 순차적 접근
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]
구문
arr.filter(callback(element[, index[, array]])[, thisArg])
- callback : 각 요소를 시험할 함수. true : 유지, false: 버림
- element : 처리할 현재 요소
반환값
- 테스트 통과한 요소로 이루어진 새로운 배열
- 테스트 통과한 요소가 없으면 빈 배열을 반환
function isBigEnough(value) {
return value >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered 는 [12, 130, 44]
사용법
- 콜백 함수를 통해 boolean 값을 반환하는 함수 등록하기
- 콜백 함수의 3개 인자
- element
- index
- array
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; });
- 콜백 함수의 3개 인자
- 원시적인 값 뿐 아니라 json과 같은 객체를 사용해 true 판별 가능
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}]
- = 모든 값을 true/false로 분류해 원하는 조건을 만족하는 배열 반환
- map, reduce 등 다른 함수와 조합 가능
- 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(richNames); // ["YD", "Bill"]
주의사항
- filter 함수는 객체를 직접 사용하거나 변형시키지 않지만 callbackfn을 통해 수정할 수 있으며 이는 문제를 발생시키는 원인이 됩니다.
- callbackfn이 호출되는 범위는 callbackfn이 처음 호출되기 이전이며, filter는 순회하는 도중에 추가된 요소는 접근하지 않습니다. 반대로 순회하는 도중 수정이 일어나면 변경된 값이 callbackfn에 전달되고 삭제된 요소는 접근하지 않습니다.
map()
Array.prototype.map()
- 메서드
- 배열 내의 모든 요소 각각에 대해 주어진 함수를 호출한 결과를 모아 새로운 배열 반환
- const array1 = [1, 4, 9, 16]; // pass a function to map const map1 = array1.map(x => x * 2); console.log(map1); // expected output: Array [2, 8, 18, 32]
구문
arr.map(callback(currentValue[, index[, array]])[, thisArg])
반환 값
- 배열의 각 요소에 대해 실행한 callback의 결과를 모은 새로운 배열
- const numbers = [1, 2, 3, 4, 5]; const result = numbers.map(number => number * number); console.log(numbers); // [1, 2, 3, 4, 5]; console.log(result); // [1, 4, 9, 16, 25]
사용법
- callbackfan을 통해 주어진 3개의 인자(요소 값, index, 순회하는 대상 객체)를 사용해 새로운 값을 만드는 함수를 등록
- const numbers = [1]; numbers.map((number, index, source) => { // number: 요소값 // index: source에서 요소의 index // source: 순회하는 대상 console.log(number); // 1 console.log(index); // 0 console.log(source); // [1] return number * number; });
- 주로 number에 해당하는 요소 값을 많이 활용하지만 index와 array도 함께 사용 가능
- // 프로그래밍 이름 길이 구하기 const programingLanguages = ["javascript", "java", "c#", "c++", "c"]; const lengthOfProgramingLanguages = programingLanguages.map(language => language.length); console.log(lengthOfProgramingLanguages); // [10, 4, 2, 3, 1];
주의사항
- map 함수는 객체를 직접 사용하거나 변형시키지 않지만 callbackfn을 통해 수정할 수 있으며 이는 문제를 발생시키는 원인이 됩니다.
- callbackfn이 호출되는 범위는 callbackfn이 처음 호출되기 이전이며, map이 순회하는 도중에 추가된 요소는 접근하지 않습니다. 반대로 순회하는 도중 수정이 일어나면 변경된 값이 callbackfn에 전달되고 삭제된 요소는 접근하지 않습니다.
- // array 요소가 추가되는 경우 const numbers = [1, 2, 3, 4, 5]; const result = numbers.map(number => { numbers.push(number); return number * number; }); console.log(result); // [1, 4, 9, 16, 25]; // array 요소가 수정되는 경우 const numbers = [1, 2, 3, 4, 5]; const result = numbers.map(number => { numbers.pop(); return number * number; }); console.log(result); // [1, 4, 9, empty × 2];
참고:
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map
https://7942yongdae.tistory.com/49
반응형
'프론트엔드 > JavaScript' 카테고리의 다른 글
[javascript] Truthy값과 falsy값, 단축평가 응용하기 (0) | 2022.03.18 |
---|---|
[javascript] 이벤트와 이벤트 객체 (0) | 2022.02.21 |
자바스크립트 응용편 (0) | 2021.05.03 |
자바스크립트 기본문법 2 (입력과 데이터 가공: 이벤트, 객체) (0) | 2021.04.23 |
[Javascript] switch문과 if 문 (0) | 2021.04.16 |