일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바스크립트 렉시컬스코프
- but requested an insecure XMLHttpRequest endpoint 'http://~~’. This request has been blocked; the content must be served over HTTPS.
- ios 크로스브라우징
- refetchOnWindowFocus
- K-SW SQUARE
- AWS 로드밸런서
- React Query
- 리액트 쿼리
- activeElement
- Kafka
- 자바스크립트 옵셔널 체이닝
- active blur
- 리액트 가상키보드
- 모던 자바스크립트 Deep Dive
- 퍼듀대학교
- 자바스크립트 스코프 체인
- 자바스크립트 논리합 연산자
- 자바스크립트 null 병합
- EC2 HTTPS로 연결
- Purdue university
- 자바스크립트 중첩함수
- 로현 청춘의개발
- 자바스크립트
- 자바스
- 모두의시간
- 자바스크립트 변수 호이스팅
- 사파리 가상키보드
- 자바스크립트 호이스팅
- touchmove 이벤트
- net::R_SSL_PROTOCOL_ERROR
- Today
- Total
개발 여행자, 현
[JavaScript] 자바스크립트 map, filter의 차이 본문
자바스크립트 map, filter의 차이
1. map()
map() 메서드는 배열의 모든 요소 각각에 callback 함수를 순서대로 불러내 그 함수의 반환값으로 새로운 배열을 만들어낸다.
* 기존 배열과 배열의 길이가 달라질 수 없음
array.map(callback(currentValue[, index[, array]])[. thisArg])
- callback 함수는 array의 모든 요소를 호출한다.
- currentValue(현재값)에는 array안에서 처리될 현재 요소를 넣는다.
- index(Optional)에는 처리할 현재 요소의 인덱스를 넣는다.
- array(Optional)에는 map()을 호출한 배열을 넣는다.
- thisArg(Optional)에는 callback을 실행할 때 this로 사용할 값을 넣는다.
< map() 사용예시 >
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let map_result = array.map((v, i) => {
return v * v;
});
console.log(map_result)
// [1, 4, 9, 16, 25, 36, 49, 64, 81]
2. filter()
filter() 메서드는 주어진 callback함수 조건에 부합한 요소들을 새로운 배열로 반환한다.
* 기존 배열과 배열의 길이가 달라질 수 있음
array.filter(callback(element[, index[, array]])[, thisArg])
- callback 함수는 각 요소들이 조건에 부합한지 판별하고, true이면 요소를 유지하고 false이면 요소를 버린다.
- element는 처리할 현재요소
- index(Optional)에는 처리할 현재 요소의 인덱스를 넣는다.
- array(Optional)에는 filter()를 호출한 배열을 넣는다.
- thisArg(Optional)에는 callback을 실행할 때 this로 사용할 값을 넣는다.
< filter() 사용예시 >
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var filter_result = array.filter((v, i) => {
if (v % 2 == 0) return v;
});
console.log(filter_result)
// [2, 4, 6, 8]
3. map()과 filter()의 주요한 차이점
1) 배열의 길이가 다르다
map 메서드는 기존 array의 길이와 반환하는 새로운 array의 길이가 같다.
하지만 filter 메서드는 기존 array의 길이와 새로운 array의 길이가 다를 수 있다.
// map()
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let map_result = array.map((v, i) => {
if (v % 2 == 0) return v;
});
console.log("map_result", map_result);
// [undefined, 2, undefined, 4, undefined, 6, undefined, 8, undefined]
// filter()
let filter_result = array.filter((v, i) => {
if (v % 2 == 0) return v;
});
console.log("filter_result", filter_result);
//[2, 4, 6, 8]
2) 반환값의 차이
// map()
let array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let map_result = array.map((v, i) => {
return v * v;
});
console.log("map_result", map_result);
// [1, 4, 9, 16, 25, 36, 49, 64, 81]
// filter()
let filter_result = array.filter((v, i) => {
return v * v;
});
console.log("filter_result", filter_result);
//[1, 2, 3, 4, 5, 6, 7, 8, 9]
return 값으로 현재요소*현재요소 값을 반환해주는데 왜 filter 메서드는 현재요소값을 반환하는걸까?
-> filter() 콜백 함수는 리턴값의 불리언이 true인 값만 가지고 배열을 만들기 때문
그래서 v % 2 == 0에서 v값에 따라 조건이 true면 v를 그대로 저장한다.
즉, map은 v * v 자체를 '산술'로 보지만 filter는 '논리'로 본다. v * v 값은 무엇을 하든(0 제외) 참이다.
'JavaScript' 카테고리의 다른 글
[JS] 자바스크립트의 표준화와 특징 및 ECMA에 대하여 (0) | 2023.07.22 |
---|---|
[JS] 프로그래밍이란? - 모던 자바스크립트 Deep Dive (0) | 2023.07.22 |
[Javascript] 배열 합치기 (concat, spread 전개연산자) (0) | 2022.08.02 |
[JavaScript] 자바스크립트 Replace() 문자 변환 (0) | 2022.04.06 |
[JavaScript] 자바스크립트 배열이 비어있는지 확인하기 (isArray, length) (0) | 2022.04.05 |