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문보다 느림, 오버플로우 발생 우려
'개발 > 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 |