Day 4 - Array Cardio Day 1
완성 코드 - script
part
1 | // Array.prototype.filter() |
Map, Reduce, Filter, Sort in JS
이번 Day 4의 과제는 명과제였다. 역시 기본이 제일 중요하고, 기본에 가장 충실해야 한다. 의미없는 for loop
를 사용해서 가독성을 떨어뜨리지 않고, Map
, Reduce
, Filter
, Sort
사용으로 효율적인 데이터 연산을 할 수 있다.
Map
Map Method의 기본 형식이다.
1 | 배열.map((요소, 인덱스,배열)=>{ |
기본 원리는 간단하다. 반복문을 돌며 배열 안의 요소들은 1:1
로 짝지어 준다. 그래서 매핑한다 고 표현한다.
이번 과제에서 Map을 사용한 방법이다.
1 | const fullNames = inventors.map( |
inventors
객체에 map
연산으로 요소 inventor
의 first
, last
데이터를 합쳐서 return한다. Arrow Function
의 인자로 inventor
가 들어갔는데 i
로 해도 되고 아무렇게나 해도 상관없다. (하지만 클린 코드 를 지향하자)
Reduce
Reduce Method의 기본적인 형식이다.
1 | 배열.reduce((누적값, 현재값, 인덱스, 요소) => { |
누적값으로 연산하기에 흔히 덧셈으로 예시를 들곤 하지만, 덧셈 함수는 아니다.
이번 과제에서 Reduce를 사용한 방법이다.
1 | const totalYears = inventors.reduce((total, inventor) => { |
inventor
요소의 passed
, year
값의 차를 total
에 누적해서 더한다. total
이 어디서 초기화되었냐면, }, 0);
에서 0으로 누적값을 선언함과 동시에 초기화할 수 있다.
Filter
Filter는 이름 그대로 요소들을 걸러내는 것이 목적이다. filter에서 작성한 함수에서 나오는 리턴 값이 true
이냐 false
이냐를 기준으로 true
의 값만 걸러내어 새로운 배열을 만들어낸다.
이번 과제에서 Filter를 사용한 방법이다.
1 | const fifteen = inventors.filter( |
inventors
에서 year
값이 1500~1599인 요소만 fifteen
배열에 다시 넣는다. return true
, return false
의 표현이 저기서 없는 이유는 inventor.year >= 1500 && inventor.year < 1600
표현 자체가 조건문이라서 boolean
형 데이터를 반환하기 때문에 굳이 if ~
표현이 필요없다.
Sort
Sort Method는 정렬할 함수를 임의로 작성해도 되고, 그냥 Array.sort()
로 사용해도 된다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따른다.
이번 과제에서는 임의의 정렬 함수를 작성하여 사용하였다.
1 | const ordered = inventors.sort((a, b) => (a.year > b.year ? 1 : -1)); |
inventors
의 year
순으로 정렬하기 위해 positive
, negative
의 값을 기준으로 sort
한다.