CODE 고차함수

수민·2022년 11월 17일
0

code

목록 보기
9/47

❗️함수는 일급 객체이다.

  • 자바스크립트에는 특별한 대우를 받는 일급 객체가 있다.
  • 대표적인 일급 객체 중 하나가 바로 함수이다.

👉 다음 조건을 만족하는 객체를 일급 객체라고 한다.

1.무명의 리터럴로 생성할 수 있다. (런타임 생성이 가능하다.)
2.변수나 자료구조(배열의 요소나 객체의 속성값)에 할당 할 수 있다.
3.다른 함수의 인자로 전달될 수 있다.
4. 다른 함수의 결과로서 리턴될 수 있다.

고차함수란?
고차함수는 다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수 를 뜻합니다.

스위프트의 함수(클로저)는 일급시민이기 때문에 함수의 전달인자로 전달할 수 있으며, 함수의 결과값으로 반환할 수 있습니다.

고차함수 종류
map
filter
reduce
forEach
compactMap
FlatMap

map

Returns an array containing the results of mapping the given closure over the sequence’s elements.

기존의 컨테이너의 요소에 대해 정의한 클로저로 매핑한 결과를 새로운 컨테이너로 반환합니다.

for문으로 변환하기


let string = ["1", "2", "3", "4", "5"]
var numbers: [Int] = []
for index in string {
    if let changeToInt = Int(index) {
        numbers.append(changeToInt)
    }
}

print(numbers)
// [1, 2, 3, 4, 5]

고차함수 map으로 변환

let string = ["1", "2", "3", "4", "5"]
let numbers = string.map { Int($0)! }

print(numbers)
// [1, 2, 3, 4, 5]

filter

Returns an array containing, in order, the elements of the sequence that satisfy the given predicate.

기존 컨테이너의 요소에 대해 조건에 만족하는 값에 대해서 새로운 컨테이너로 반환합니다.

For문으로 변환하기

// numbers에서 짝수만 추출하기

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var evenNumbers: [Int] = []

for number in numbers {
    if number % 2 == 0 {
        evenNumbers.append(number)
    }
}

print(evenNumbers)
// [2, 4, 6, 8]

고차함수 filter 로 변환하기

// numbers에서 짝수만 추출하기

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let evenNumbers = numbers.filter { $0 % 2 == 0 }

print(evenNumbers)
// [2, 4, 6, 8]

reduce

Returns the result of combining the elements of the sequence using the given closure.

reduce 는 정의한 클로저를 사용하여 기존 컨테이너의 요소를 결합한 결과를 반환합니다.


const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const sum1 = numbers.reduce((accumulator, currentNumber) => accumulator + currentNumber);

console.log('sum1 =', sum1);
// callback함수 선언 후 이용
function sumReducer(accumulator, currentNumber) {
  return accumulator + currentNumber;
}

const sum2 = numbers.reduce(sumReducer);

console.log('sum2 =', sum2);
  1. 오브젝트 배열에서 원하는 항목의 값만 더하기
// 실제직업과 다릅니다.
const friends = [
  {
    name: '양주진',
    age: 32,
    job: '코인러',
    married: false,
  },
  {
    name: '오영제',
    age: 32,
    job: '랩퍼',
    married: false,
  },
  {
    name: '서준형',
    age: 32,
    job: '2년차 유부남',
    married: true,
  }
];

// 3명의 나이를 더해봅니다.
// 여기서 초기값 설정이 반드시 필요합니다.
const ageSum = friends.reduce((accumulator, currentObject) => {
  return accumulator + currentObject.age;
}, 0);

console.log('친구들 나이 합 ', ageSum);

배열의 요소가 하나 뿐이면서 initialValue가 없는 경우, 또는 initialValue는 주어졌으나 배열이 비어 있는 경우엔 계산할 필요가 없기 때문에 그 값을 callback 호출 없이 그대로 반환합니다.

위 작동방식을 근거로

예제2번의 경우 initialValue가 없을 경우 첫 번째 콜백에서 TypeError가 발생하게됩니

const friends = [
  {
    name: '양주진',
    age: 32,
    job: '코인러',
    married: false,
  },
  {
    name: '오영제',
    age: 32,
    job: '랩퍼',
    married: false,
  },
  {
    name: '서준형',
    age: 32,
    job: '2년차 유부남',
    married: true,
  }
];

// initialValue 설정X
const ageSum = friends.reduce((accumulator, currentObject) => {
  return accumulator + currentObject.age;
});



profile
헬창목표

0개의 댓글