Section 2. 고차함수 문제풀이

keepgoing·2023년 1월 12일

코드스테이츠

목록 보기
2/31
post-thumbnail

Q20 : 객체와 키를 입력받아 키에 해당하는 값이 배열인 경우, 배열의 각 요소를 제곱한 새로운 배열을 리턴

✅나의 답

function square(number) {
  return number * number;
}
//키 값이 배열이라면?
//배열의 요소를 제곱한 새로운 배열 리턴
//배열이 아니라면?

function getSquaredElementsAtProperty(obj, property) {
  if (Array.isArray(obj[property])) {
    return obj[property].map((a) => square(a));
  } else {
    return [];
  }
}

✅ 혼동한 부분

console.log() 첫번째와 두번째가 같은 동작을 하는데 혼동했다.

let key = [2, 1, 5];

function square(number) {
  return number * number;
}

console.log(key.map(square));

console.log(
  key.map((num) => {
    return num * num;
  })
);

Q23 : number 타입을 요소로 갖는 배열을 입력받아 배열의 모든 요소의 곱을 리턴해야 합니다.

✅나의 답

//처음으로 푼 코드
function computeProductOfAllElements(arr) {
  if (arr.length == 0) return 1;
  return arr.reduce((acc, cur) => acc * cur);
}

✅ 수정한 코드

  • reduce의 initialValue 사용하자!
//리팩토링 코드
function computeProductOfAllElements(arr) {
  return arr.reduce((acc, cur) => acc * cur, 1);
}

Q27 : 문자열을 요소로 갖는 배열을 입력받아 배열에서 가장 긴 문자열을 리턴해야 합니다.

✅나의 답

//reduce 이해하고 리팩토링
function getLongestElement(arr) {
  return arr.reduce((acc, cur) => (acc.length < cur.length ? cur : acc), "");
}

✅ 추가학습

  • 오랜 적이였던 reduce와 친해졌다
  • reduce로 많은 걸 할 수 있다. 배열에서 가장 긴 문자열 구하기 정도

Q30 : number 타입을 요소로 갖는 배열을 입력받아 배열의 모든 요소의 곱을 리턴해야 합니다.

✅나의 답

//처음으로 푼 코드
function findShortestWord(arr) {
  //가장 짧은 문자열 리턴
  let answer = "";
  const strArr = arr.filter((a) => typeof a === "string");
  if (strArr.length === 0) return "";
  //길이가 젤 짧은 거 구하기
  //길이만 담긴 배열 만들기 => 최솟값 인덱스 => indexOf() => 리턴
  const numArr = strArr.map((a) => a.length);
  console.log(numArr);
  return strArr[numArr.indexOf(Math.min(...numArr))];
}

✅ 리팩토링 코드

//reduce와 친해진 후
function findShortestWord(arr) {
  const strArr = arr.filter((el) => typeof el === "string");
  if (strArr.length === 0) return "";
  return strArr.reduce((acc, cur) => (acc.length > cur.length ? cur : acc));
}
  • reduce를 이해해서 기분이 좋다.

Q32 : 2차원 배열(배열을 요소로 갖는 배열)을 입력받아 모든 수(number)의 합을 리턴해야 합니다.

✅나의 답

//다시 푼 코드
function sumOfArraysInArray(arr) {
  return arr
    .reduce((acc, cur) => acc.concat(cur))
    .filter((el) => typeof el === "number")
    .reduce((acc, cur) => acc + cur, 0);
}

후기 : reduce를 이해해서 좋았다.

profile
매일매일

0개의 댓글