[JS] forEach, map, reduce, every, filter 사용법

코린·2023년 7월 13일
0

JavaScript

목록 보기
2/3
post-thumbnail

안녕하세요!!!

코딩테스트 공부하다가 도당체 넘 헷갈려서 개념정리를 하려고 왔습니다....

forEach

주어진 함수를 배열 요소 가각에 대해 실행합니다.

쉽게 설명하자면 배열의 요소 전체를 도는 함수라고 보시면 됩니다.

const array1 = ['a', 'b', 'c'];

array1.forEach(element => console.log(element));

// "a"
// "b"
// "c"

위 코드를 보시면 element 라는 요소가 배열의 원소 하나하나를 의미한다는 것을 알 수 있습니다.

요 element 즉 매개변수 자리는 선택적 매개변수라는 것이 있습니다.

const array1 = ['a', 'b', 'c'];

array1.forEach((a,b,c)=>{ console.log(a,b,c) });

// "a" 0 Array ["a", "b", "c"]
// "b" 1 Array ["a", "b", "c"]
// "c" 2 Array ["a", "b", "c"]

위처럼 a는 value,b는 인덱스, c는 배열을 출력하는 것을 확인할 수 있습니다.

만약 a,b만 오는 경우 인덱스와 value만 나오는 것을 확인할 수 있습니다.

map

배열 내의 모든 요소 가각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.

forEach와의 다른 점은 새로운 배열을 반환한다는 것입니다. forEach는 반환값이 없습니다.

const array1 = [1, 4, 9, 16];

// Pass a function to map
const map1 = array1.map(x => x * 2);

console.log(map1);
//Array [2, 8, 18, 32]

map 도 선택적 매개변수로 value, index, arr를 사용할 수 있습니다.

const array1 = [1, 4, 9, 16];

// Pass a function to map
const map1 = array1.map((a,b,c)=>{

	console.log(a);

  	console.log(b);

    console.log(c);

  	return a + a;
  
});

console.log(map1);

/* output

> 1
> 0
> Array [1, 4, 9, 16]
> 4
> 1
> Array [1, 4, 9, 16]
> 9
> 2
> Array [1, 4, 9, 16]
> 16
> 3
> Array [1, 4, 9, 16]
> Array [2, 8, 18, 32]

*/

reduce

배열의 각 요소에 대해 주어진 리듀서 함수를 실행하고, 하나의 결과값을 반환합니다.

reduce에는 누산기가 포함되어 있습니다. 배열의 각 요소에 대해 함수를 실행하고 누적된 값을 출력할 때 용이합니다.


const array1 = [1, 2, 3, 4];

const result = array1.reduce((acc,cur,idx)=>{return acc += cur},0);

console.log(result);
//10

acc는 초기값이므로 0, cur 은 하나씩 탐색하는 값이므로 array1의 값이 될 것 입니다. 그래서 result가 배열에 있는 모든 값을 더한 값이 결과값으로 나오게 됩니다. idx는 인덱스 번호를 의미합니다.


const array1 = [1, 2, 3, 4];

const result = array1.reduce((acc,cur,idx)=>{return acc += idx},0);

console.log(result);
//6

every

배열 안의 모든 요소가 주어진 판별 함수를 통과하는지 테스트합니다.
반환값은 true 혹은 false 입니다.


const array1 = [1, 30, 39, 29, 10, 13];

console.log(array1.every((currentValue) => currentValue < 40));
// true

const isBelowThreshold = (currentValue) => currentValue < 40;

const array1 = [1, 30, 39, 29, 10, 13];

console.log(array1.every(isBelowThreshold));
// true

위 처럼 따로 함수를 선언해서도 사용이 가능합니다.

filter

주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환합니다.

every와 다른 점이라 하면 배열을 반환하는 것이라고 할 수 있습니다.


const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter(word => word.length > 6);

console.log(result);
// ["exuberant", "destruction", "present"]

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter(word => word.length < 0);

console.log(result);
// []

조건에 하나도 맞지 않는 경우는 빈 배열을 반환합니다.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

잡담

코딩테스트를 공부하다보면 저는 자꼬 for, while 이런것만 쓰는데 다른분들이 쓴 코드를 보면 완죤 멋지게 reduce 나 map을 써서 아주 간결하게 쓰는걸 보고 저두 써봐야겠다!! 했지만 솔직히 잘 모르니까 계속 안 쓰게 되어서 정리라도 해놓자.. 그러면 다시봐서라도 쓰겠지 하는 마음으로 쓴 글입니다...^^

profile
안녕하세요 코린입니다!

0개의 댓글