[코플릿] 고차함수

🤖 고차함수

특징

  • 다른 함수를 인자로 받는 경우
  • 함수를 리턴하는 경우
  • 위 두가지 모두에 해당하는 경우

26_calculateScore

문제

객체를 요소로 갖는 배열과 문자열을 입력받아 각 요소의 'animal' 속성값이 문자열과 일치할 경우, 해당 요소의 'score' 속성값을 모두 더한 값을 리턴

입출력 예시

const records = [
  {
    score: 63,
    animal: 'dog',
  },
  {
    score: 87,
    animal: 'cat',
  },
  {
    score: 24,
    animal: 'dog',
  },
];

let output = calculateScore(records, 'dog');
console.log(output); // --> 87

나의 코드

function calculateScore(records, value) {
  const filtered = records.filter((x) => x.animal === value);

  const sum = (a, b) => a + b;
  return filtered.map(x => x.score).reduce(sum,0);
}

filtered 변수에 함수 매개변수로 받아온 value 값과 records 배열 안 객체의 animal 값과 같은 경우만 반환
map() 메소드를 이용해서 score 값으로만 새로운 배열을 반환한 후, 그 배열에 reduce() 메소드를 이용해 누적값 리턴


Reference

function calculateScore(records, value) {
  const sum = records.reduce(function (acc, cur) {
    if (cur.animal === value) {
      return acc + cur.score;
    } else {
      return acc;
    }
  }, 0);

  return sum;
}

reduce() 메소드만 이용하여 그 안에서 if/else() 구문 사용


27_getLongestElement

문제

문자열을 요소로 갖는 배열을 입력받아 배열에서 가장 긴 문자열을 리턴

주의 사항

  • 가장 긴 문자열이 중복이 될 경우, 앞 쪽에 있는 요소를 리턴
  • 빈 배열을 입력받은 경우, 빈 문자열을 리턴

입출력 예시

let output = getLongestElement(['one', 'two', 'three']);
console.log(output); // --> 'three'

output = getLongestElement(['one', 'two', 'wow']);
console.log(output); // --> 'one'

나의 코드

function getLongestElement(arr) {
  const length = arr.map((x) => x.length);

  let max = 0;
  length.forEach((x)=>{
    if(x > max){
      max = x;
    }
  })

  const index = length.indexOf(max);
  if(index >= 0){
    return arr[index];
  } else{
    return "";
  }
}

map() 메소드를 이용해서 배열안 요소들의 길이로 이루어진 새로운 배열을 변수 length에 할당
forEach() 메소드를 이용해서 length에 있는 값들 중 가장 큰 값을 변수 max에 할당
✅ 변수 max를 이용해서 length에서의 위치 값을 새로운 변수 index에 할당
index값을 기준 삼아서, 0 이상인 경우 arr[index]을 리턴하고 그렇지 않으면 빈 문자열 리턴


Reference

function calculateScore(records, value) {
  const sum = records.reduce(function (acc, cur) {
    if (cur.animal === value) {
      return acc + cur.score;
    } else {
      return acc;
    }
  }, 0);

  return sum;
}

reduce() 메소드만 이용하여 그 안에서 if/else() 구문 사용

❗️ 위의 문제에서도 그렇고, reduce() 활용법에 좀더 친숙해질 필요가 있겠다!


좋은 웹페이지 즐겨찾기