[JavaScript] 고차함수

2022. 5. 29. 19:44·개발/html, css, js
728x90
반응형

1. 고차함수

함수를 인수로 전달받거나 함수를 반환하는 함수

고차함수는 외부상태의 변경이나 가변데이터를 피하고 불변성을 지향한다.

또한 함수형 프로그래밍에 기반을 두고 있다.

 

[1] 고차함수의 종류

(1) sort : 원본 배열을 직접 연결하여 정렬된 배열을 리턴한다.(오름차순)

const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// expected output: Array ["Dec", "Feb", "Jan", "March"]

const array1 = [1, 30, 4, 21, 100000];
array1.sort();
console.log(array1);
// expected output: Array [1, 100000, 21, 30, 4]

//숫자요소를 정렬할때는 정렬순서를 정의하는 비교함수를 인수로 전달해야한다.
array1.sort((a,b)=>a-b);
console.log(array1);

(2) reverse : 내림차순으로 배열

const array1 = ['one', 'two', 'three'];
console.log('array1:', array1);
// expected output: "array1:" Array ["one", "two", "three"]

const reversed = array1.reverse();
console.log('reversed:', reversed);
// expected output: "reversed:" Array ["three", "two", "one"]

// Careful: reverse is destructive -- it changes the original array.
console.log('array1:', array1);
// expected output: "array1:" Array ["three", "two", "one"]

(3)  forEach : 주어진 함수를 배열 요소 각각에 대해 실행

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

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

//expected output: "a"
//expected output: "b"
//expected output: "c"

(4) map : 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환

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

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

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

  const number = [1,4,9];
  const roots = number.map(item=>Math.sqrt);
  console.log(roots); //새로운 배열을 반환한다.
  // expected output: Array [1, 16, 81]
  console.log(number); //원본배열은 건드리지 않는다
  // expected output: Array [1, 4, 9]

(5) filter : 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환

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

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

console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]

(6) find : 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환, 요소가 없으면 undefined 반환

const array1 = [5, 12, 8, 130, 44];

const found = array1.find(element => element > 10);

console.log(found);
// expected output: 12

(7) findIndex : 주어진 판별 함수를 만족하는 배열의 첫 번째 요소에 대한 인덱스를 반환, 요소가 없다면 -1 반환

const array1 = [5, 12, 8, 130, 44];

const isLargeNumber = (element) => element > 13;

console.log(array1.findIndex(isLargeNumber));
// expected output: 3

(8) every : 배열 안의 모든 요소가 주어진 판별 함수를 통과하는지 테스트, 결과는 Boolean 값으로 반환

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

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

console.log(array1.every(isBelowThreshold));
// expected output: true

(9)  some : 배열 안의 어떤 요소라도 주어진 판별 함수를 통과하는지 테스트, Boolean값으로 반환 (빈 배열은 false)

const array = [1, 2, 3, 4, 5];

// checks whether an element is even
const even = (element) => element % 2 === 0;

console.log(array.some(even));
// expected output: true


(10) reduce : 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환

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

// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce(
  (previousValue, currentValue) => previousValue + currentValue,
  initialValue
);

console.log(sumWithInitial);
// expected output: 10

2. 여러가지 function

함수 오버로딩 : 함수 이름은 동일하지만 매개변수 갯수가 다르거나 자료형이 다르다.

function myFunc(a,b,c)
{
    const len = arguments.length;
    if(len==0){
        console.log("매개변수 없음")
    }
    else if (len==1){
        console.log("한개")
    }
    else if (len==2){
        return a+b;
    }
    else {
        return a+b+c;
    }
}

디폴트 매개변수

function call(a,b = 5){
    return a+b;
}
console.log(call(1));
// expected output: 6

재귀함수 

function RecursiveFunction(n)
{
    if(n<=1) return 1; //종료조건 : 종료조건이 없으면 끝내질못함 꼭 들어가야한다.
    return n+RecursiveFunction(n-1);
}

피보나치 수열

function fibo(num)
{
    let res = [0,1];
    if(num==0){
        console.log([0]);
    }
    if(num==1){
        console.log([0,1]);
    }
    for(let i =2; i<=num;i++){
        res.push(res[i-2] + res[i-1]);
        console.log(res);
    }
}


//재귀함수 이용
function RecursiveFibo(num)
{
    if(num<2) return num;
    return RecursiveFibo(num-1) + RecursiveFibo(num-2);
}

재귀함수의 장단점 

장점 : 변수를 여러개 만들 필요없다. 반복문을 써도 되지 않아 코드가 간결해짐

단점 : for문보다 메모리를 많이 먹는다. 종료조건이 없으면 블랙홀에 빠진다. 속도가 for문보다 느림, 오버플로우 발생 우려

728x90
반응형

'개발 > html, css, js' 카테고리의 다른 글

[JavaScript] Class  (0) 2022.05.30
[JavaScript] 객체란  (0) 2022.05.30
[JavaScript] 월남뽕 게임(카드게임)  (0) 2022.05.27
[JavaScript] 야구게임 만들기  (0) 2022.05.26
[JavaScript] 로또 번호 뽑기  (0) 2022.05.25
'개발/html, css, js' 카테고리의 다른 글
  • [JavaScript] Class
  • [JavaScript] 객체란
  • [JavaScript] 월남뽕 게임(카드게임)
  • [JavaScript] 야구게임 만들기
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    js
    명령어
    go언어
    컨테이너
    블록체인
    nodejs
    node
    node.js
    ERC721
    html
    CSS
    React
    erc20
    프로그래머스
    30일 챌린지
    하이퍼레저
    30일챌린지
    도커
    go
    mysql
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[JavaScript] 고차함수
상단으로

티스토리툴바