고차함수

이윤근·2021년 6월 19일
0

고차함수

-함수를 인자로 받을 수 있고 함수의 형태로 리턴할 수 있는 함수

콜백함수 : 다른함수의 인자로 전달되는 함수
커리함수: 함수를 리턴하는 함수

고차함수에서 이 콜백함수와 커리함수를 포함한 것을 이야기하고 둘다 같이 사용되는 경우도 있다.

내장 고차함수 : 자바스크립트안에 내장되어있는 고차함수
ex) forEach, find, filter, map, reduce, sort, some, every, fill

1)filter

배열의 요소중에 특정 조건을 만족하는 요소를 걸러네는 메소드
arr.filter = function (arr, func) {
const newArr = [];
for (let i = 0; i < arr.length; i++) {
if (func(arr[i]) === true) {
newArr.push(this[i]);
}
}
return newArr;
};

filter 메소드에 들어가는 콜백함수는 true false를 리턴할 수 있다.그래서
콜백함수는 조건을 명확하게 해야하고 true 또는 false가 리턴하도록 구현해야한다.

2)map

:배열에 있는 데이터를 다른 데이터로 mapping 할때 사용
예시)
let arr = [1,2,3]
let result = arr.map(function(ele) {
return ele*2});

여기서 arr 은 맵핑할 배열이고 function (ele)에서 ele.는 배열 인덱스에 있는 값을 인자로 받는다.
그것을 return ele*2를 통해 mapping을 하게된다.
이때 따로 function을 만들어서 사용할 수있지만 미리 만들 function을 통해서 arr.map(func())처럼 사용 해도 된다.

3)reduce

배열의 각 요소를 특정 방법(함수)에 따라 원하는 하나의 형태로 응축함
예시)
let arr = [1,2,3]
let result = arr.reduce(function(acc,cur,idx) {
acc +cur;
return acc});

acc 는 return 되는 변수로 어떠한 function이 진행되는 과정에서 내가 지정한 코드를 통해 변하는 값이다.
cur은 배열 인덱스에 ㅇ값을 의미한다.
idx는 초기값으로 지정을해두지 않으면 0으로 시작한다. 하지만
let result = arr.reduce(function(acc,cur,idx) {
acc +cur;
return acc},1);

이렇게 1을 마지막에 넣었을 경우 초기값은 1이 된다.
간편하게 function을 정의하고 arr.reduce(sum,0)이렇게 해도 가능하다.
물론 객체 string도 가능하다. 그러면 초기값을 {} 나 ''를 지정하면된다.
초기값을 지정 해주지 않았을 떄 배열에 있는 type로 자동 지정 됨.

4)forEach

for문과 마찬가지로 반복적인 기능을 수행할 때 사용
반환값은 undefined이다 그래서 return을 따로 써주지않아도 된다.
예시)
const array1 = ['a', 'b', 'c'];
array1.forEach(function (element) {
console.log(element);
});

와같이 a, b, c log를 찍게된다

5)find

주어진 판별 함수를 만족하는 첫번쨰 요소의 값을 반환하는 메소드.없다라면 undefined가 반환됨.
예시)
const array1 = [5, 12, 8, 130, 44];
const found = array1.find(element => element > 10);
console.log(found);

했을때 첫번째 요소인 12가 반환된다.

6)sort

배열안에 원소를 정렬하는 함수 이다.
arr.sort()와 같이 인자값이 없다라면 오름차순,ASCII문자 순서로 정렬된다. 문자같은경우는 abc 순서 숫자같은경우는 1,10,11,2,3,4, 와 같은 순서대로 나온다(숫자 크기대로 나오지 않는다)

sort에서는 중요한 것중에 하나가 반환값이다. 두수 a,b를 parameter로 받게 되는데 두수를 연산했을 때

반환값이 <0 작다라면 a가 b보다 앞에 있어야 한다.
반환값이 =0이라면 순서를 바꾸지 않는다
반환값이 >0이라면 b가 a보다 앞에 있어야 한다.

이러한 원리로 sort가 실행이 된다 그래서
오름차순으로 정리 할 때에는

arr.sort(function(a,b){
return a-b;
});

이렇게 쓰고
내림차순으로 정리할 때에는

arr.sort(fucntion(a,b){
return b-a;
});

이렇게 쓴다.

7)every

배열 안의 모든 요소가 주어진 판별 함수를 통과하는지 테스트하는 메소드가 만족한다면 true가 반환되고 하나라고 반례가 있다라면 false가 반환된다.

8)some

배열 안의 하나의 요소라도 주어진 판별함수를 통화하는지 테스트하는 메소드 하나라도 만족이 되면 true 다 만족 못할때에는 false가 반환된다.

9)fill

arr.fill(value,start,end);
value :채울 값 start:인덱스 시작점,end:인덱스 끝나는점
return : 변형한 배열

예시)
const array = [1,2,3,4];
arr.fill(0,2,4); ->[1,2,0,0];

profile
성실한코딩러

0개의 댓글