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
  })
}

Updated: