11일차
TIL 210316
1. 일급 객체인 함수
- 일급객체는 아래의 3가지 특징이 있다.
- 변수에 할당 할 수 있다
- 다른 함수의 인자로 전달 될 수 있다
- 다른 함수의 결과로서 리턴 될 수 있다.
- 이는 함수를 데이터 (string, number, boolean, array, object) 를 다루듯이 다룰 수 있다는 것을 의미한다.
- 함수 표현식은 함수 선언식과 다르게 호이스팅이 적용되지 않는다.
2. 고차함수
- 고차함수는 함수를 인자(argument) 로 받거나 함수를 리턴하는 함수를 말합니다.
- 이때 다른 함수의 인자로 전달되는 함수를 콜백 함수라고 한다.
3. 고차 함수 중 filter
- 배열의 filter 메소드는 함수를 인자로 받는 고차 함수다.
- filter에 인자로 전달된 콜백 함수는 arr의 각 요소를 전달 받아 호출된다.
- 콜백 함수가 true 를 리턴하는 경우에만 새로울 배열에 추가된다.
- 배열의 각 요소가 특정 논리(함수)에 따르면 사실(boolean) 일 때 따로 분류한다(filter)
4. 고차함수 중 map
- 하나의 데이터를 다른 데이터로 mapping 할때 사용된다.
- 배열의 각 요소가 특정 논리(함수)에 의해 다른 요소로 지정(map) 된다.
5. 🧩고차함수 중 reduce
- 배열을 하나의 값으로 만들어 준다.
- 배열의 각 요소를 특정 응축 방법(함수)에 따라 원하는 하나의 형태로 응축한다(reduction)
- 어떤 목적으로 사용하느냐에 따라 초기값이 매우 중요하다.
- 다양한 사용법이 있다.
- 배열을 문자열로 : 하나의 유저의 이름과 쉼표를 이어붙인다(concat)
- 배열을 객체로 : 한 유저의 이름의 첫 글자를 주소록 객체 속성의 키(key) 로, 유저 정보를 주소록 객체 속성의 값(value)로 추가
- spread syntax와 함꼐 사용
reduce(acc,cur) [...arr...cur]
하면 요소로 사용 가능
6. 이외 추가로 알게 된 것
- 조건부 연산자 : 물음표로 표시한다. = 삼항연산자
let result = condition ? value1 : value2
평가 대상인 condition이 truthy한 값이면 value1이, 그렇지 않으면 value2가 반환된다.
- 배열에 random 숫자 추가한 뒤에 전체 배열에서 랜덤 숫자가 몇번째인지 알고 싶을 때
function getIndex(arr, num) {
return arr.filter(function(ele){
return ele < num
}).length
reduce
는 객체 배열에서 값 더하기도 가능하다.
var initialValue = 0;
var sum = [{x: 1}, {x:2}, {x:3}].reduce(function (accumulator, currentValue) {
return accumulator + currentValue.x;
},initialValue)
console.log(sum) // logs 6
- 여러 고차함수를 짬뽕해서 쓸 수 있다. & filter에서 지정한 ele 변수를 map함수에서도 사용 가능하다.
function studentReports(students) {
let result = students.filter(function(ele){
return ele.gender ==='female'
})
return result.map(function(ele){
let sum = ele.grades.reduce(function(acc,cur){
return acc+cur
}, 0)
let average = sum / ele.grades.length
ele.grades = average
return ele
})
}