JavaScript #11

날림·2021년 9월 11일

js/node

목록 보기
17/25

내장 고차함수 (Built-in)

JavaScript에 기본적으로 내장된 고차함수들
그 중 배열에 관련된 것들을 공부

filter

모든 배열의 요소 중에서 특정 조건을 만족하는 요소를 걸러내는 메소드

특정 조건 = 함수의 형태
= 걸러내기 위한 조건을 명시한 함수를 인자로 받기 때문고차함수

arr.filter(callback(element[, index[, array]])[, thisArg])

Array.prototype.filter() - mdn

Array.prototype.filter = function(func) {
  const arr = this;
  const newArr = []
  for(let i = 0; i < arr.length; i++) {
    if (func(arr[i]) === true) {
      newArr.push(this[i])
    }
  }
  return newArr;
}
  • 배열의 요소를 인자로 전달되는 콜백 함수에 하나씩 전달

  • 콜백 함수는 전달받은 요소를 받아 함수를 실행
    - 콜백 함수 조건에 따라 참 또는 거짓을 리턴

  • 참으로 리턴되는 요소만 모아 새로운 배열을 만들고 리턴
    - 참으로 리턴되는 요소가 없다면 빈 배열을 리턴
    = (참으로 리턴되는 요소 !== true)
    = Deep equality로 조건을 명확하게 밝히는 걸 권장


map

배열의 각 요소함수에 의해 다른 요소로 지정(map) 되는 메소드

= 요소를 다르게 지정할 방법을 명시한 함수를 인자로 받기 때문고차함수

arr.map(callback(currentValue[, index[, array]])[, thisArg])

Array.prototype.map() - mdn

  • 배열의 요소를 인자로 전달되는 콜백 함수에 하나씩 전달

  • 콜백 함수는 전달받은 요소를 받아 함수를 실행
    - 콜백 함수에 따라 나오는 값을 리턴

  • 리턴된 요소를 모아 새로운 배열을 만들고 리턴
    - 원본 배열은 바뀌지 않는다


reduce

배열의 각 요소를 특정 방법(함수)에 따라 원하는 하나의 형태로 압축하는 메소드 (reduction)

= 압축할 방법을 명시한 함수를 인자로 받기 때문고차함수

arr.reduce(callback[, initialValue])

Array.prototype.reduce() - mdn

[0, 1, 2, 3, 4].reduce(function(acc, cur) {
  return acc + cur;
});
[0, 1, 2, 3, 4].reduce( (prev, curr) => prev + curr );

reduce() 작동 방식 - mdn

  • 초기값 initialValue 을 지정할 수 있다
    - 없다면 배열의 첫번째 값 arr[0]

  • 초기값과 다음값을 같이 콜백 함수로 전달

  • 콜백 함수는 전달받은 요소를 받아 함수를 실행
    - 콜백 함수에 따라 나오는 값을 리턴

  • 위에서 리턴된 값과 그 다음값을 다시 콜백 함수로 전달
    - 콜백 함수에 따라 나오는 값을 다시 리턴

  • 위 과정을 배열 끝까지 반복

  • 마지막에 리턴된 값을 리턴


forEach

주어진 함수를 배열 각 요소에 대해 실행

= 실행할 함수를 인자로 받기 때문고차함수

Array.prototype.forEach() - mdn

arr.forEach(callback(currentvalue[, index[, array]])[, thisArg])
  • map()비슷한 느낌?

  • map()reduce()와는 달리 undefined를 반환

  • for 반복문forEach()바꿔서 쓸 수 있다

const items = ['item1', 'item2', 'item3'];
const copy = [];

// 이전
for (let i=0; i<items.length; i++) {
  copy.push(items[i]);
}

// 이후
items.forEach(function(item){
  copy.push(item);
});

find

주어진 함수를 만족하는 첫 번째 요소의 값을 반환

= 만족할 조건을 명시한 함수를 인자로 받기 때문고차함수

Array.prototype.find() - mdn

arr.find(callback[, thisArg])
  • 배열의 각 요소에 콜백 함수를 실행
    - 참이 나왔다면 바로 멈추고 참을 반환한 값을 반환
    - 끝까지 나오지 않았다면 undefined 반환
  • findIndex() : 값 대신 인덱스를 반환

sort

배열의 요소를 적절한 위치에 정렬

= 정렬할 조건을 명시한 함수를 인자로 받기 때문고차함수

Array.prototype.sort() - mdn

arr.sort([compareFunction])
  • 정렬할 조건을 명시한 함수가 없다면
    - 요소를 문자열로 변환
    - 유니코드 순서로 비교하여 정렬

  • 정렬할 조건을 명시한 함수가 있을 때
    - 함수의 반환 값에 따라 위치를 정한다

a, b를 비교할 때

  • compareFunction(a, b) : 0보다 작으면
    = a를 b보다 앞으로 정렬
  • compareFunction(a, b) : 0이면
    = 서로 바꾸지 않음
  • compareFunction(a, b) : 0보다 크면
    = a를 b보다 뒤로 정렬
  • a와 b가 각각 동일하게 들어간다면 결과값도 항상 동일해야한다

예) 숫자를 정렬할 때

let numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});

console.log(numbers);
// [1, 2, 3, 4, 5]
  • 원본 배열이 정렬된다!

some

배열 어떤 요소 하나라도 주어진 함수를 통과하는지 테스트하는 메소드

= 판별할 조건을 명시한 함수를 인자로 받기 때문고차함수

Array.prototype.some() - mdn

arr.some(callback[, thisArg])
  • 배열의 각 요소에 콜백 함수를 실행
    - 참이 하나라도 나왔다면, true을 반환
    - 그 외엔 모두 false 반환
    = 빈 배열에서는 무조건 false

every

배열 모든 요소가 주어진 판별 함수를 통과하는지 테스트하는 메소드

= 판별할 조건을 명시한 함수를 인자로 받기 때문고차함수

Array.prototype.every() - mdn

arr.every(callback[, thisArg])
  • 배열의 각 요소에 콜백 함수를 실행
    - 모두 참이어야만, true을 반환
    - 그 외엔 모두 false 반환
    = 빈 배열에서는 무조건 true
profile
항상배우기

0개의 댓글