Javascript

다시 시작하는 자바스크립트 - 배열 퀴즈2(고차함수)

min' 2023. 3. 22. 09:40
728x90
반응형

 

헷갈리는 것들만 따로 정리할 예정.

deep dive 책을 함께 공부함.

 

 

 

배열 퀴즈에서 사용했던 문제들을 고차함수 식으로 풀어볼 거임.

그러고보니 문제 2번은 이미 고차함수로 바꿨다는 사실이...(쨋든 시작)

 

- 퀴즈 1

 

주어진 배열 안의 딸기 아이템을 키위로 교체하는 함수를 만들기
단, 주어진 배열을 수정하지 않도록!
- input: ['🍌', '🍓', '🍇', '🍓']
- output: [ '🍌', '🥝', '🍇', '🥝' ]

 

function replace(array) {
  return array.map((fruit)=> {
    if(fruit === "🍓") {
      return fruit === "🥝";
    } else {
      return fruit; 
    }
  });
}

const fruits = ['🍌', '🍓', '🍇', '🍓'];
result = replace(fruits);
console.log(fruits);
// ['🍌', '🍓', '🍇', '🍓']
console.log(result);
// [ '🍌', '🥝', '🍇', '🥝' ]

 

이걸 삼항연산자로 만들 수도 있음.

 

function replace(array) {
  return array.map((fruit) => fruit  === "🍓" ? fruit = "🥝" : fruit)
}

const fruits = ['🍌', '🍓', '🍇', '🍓'];
result = replace(fruits);
console.log(fruits);
// ['🍌', '🍓', '🍇', '🍓']
console.log(result);
// [ '🍌', '🥝', '🍇', '🥝' ]

 

이제 마지막으로 재사용이 가능하게끔 코드를 작성해보겠음.

 

function replace(array, from, to) {
  return array.map((fruit) => {
    if(fruit === from) {
      return fruit = to;
    } else {
      return fruit;
    }
  });
}

const fruits = ['🍌', '🍓', '🍇', '🍓'];
result = replace(fruits, "🍓", "🥝");
console.log(fruits);
// ['🍌', '🍓', '🍇', '🍓']
console.log(result);
// [ '🍌', '🥝', '🍇', '🥝' ]

 

- 퀴즈 2

 

배열과 특정한 요소를 전달받아, 배열 안에 그 요소가 몇 개나 있는지 카운트하는 함수 만들기
- input : [ '🍌', '🥝', '🍇', '🥝' ], '🥝'
- output : 2

 

function counter(array, item) {
  return array.reduce((sum, fruit) => {
    if(fruit === item){
      sum++;
    }
    return sum;
  }, 0);}

const array2 = [ '🍌', '🥝', '🍇', '🥝' ];
result = counter(array2, "🥝");

console.log(array2);
// [ '🍌', '🥝', '🍇', '🥝' ]
console.log(result);
// 2

 

2번은 이미 예전에 풀었기 때문에 복사...!

 

- 퀴즈 3

 

배열1, 배열2 두 개의 배열을 전달 받아, 배열1 아이템 중 배열2에 존재하는 아이템만 담고 있는 배열 반환
- input : [ '🍌', '🥝', '🍇' ], [ '🍌', '🍓', '🍇', '🍓' ]
- output : [ '🍌', '🍇' ]

 

function match(array1, array2) {
  return array1.filter((fruit) => array2.includes(fruit));
}

const fruits1 = [ '🍌', '🥝', '🍇' ];
const fruits2 = [ '🍌', '🍓', '🍇', '🍓' ];

result = match(fruits1, fruits2);
console.log(array1, array2);
//  [ '🍌', '🥝', '🍇' ], [ '🍌', '🍓', '🍇', '🍓' ]
console.log(result);
// [ '🍌', '🍇' ]

 

고차함수 filter() 사용...!

 

- 퀴즈 4

 

5 이상의 숫자들의 평균을 구하기

- input : [ 3, 16, 5, 25, 4, 34, 21 ]

 

function average(array) {
  return array
  .filter((num) => num >= 5)
  .reduce((avg, num, _, array) => avg + num / array.length, 0);
}

const nums = [ 3, 16, 5, 25, 4, 34, 21 ];
result = average(nums);
console.log(nums);
// [ 3, 16, 5, 25, 4, 34, 21 ]
console.log(result);
// 20.2

 

728x90
반응형