8월 1일 일요일 TIL

김병훈·2021년 8월 1일
0

til

목록 보기
55/89

26번

  • 객체를 요소로 갖는 배열과 문자열을 입력받아 각 요소의 동물 속성값이 문자열과 일치할 경우, 해당 요소의 점수 속성값을 모두 더한 값을 리턴
    • 먼저 문자열과 일치하는 경우로 filter를 해주고, reduce로 점수를 응축하려고 했지만 reduce만 써도 되는 문제였다.

이 문제를 풀면서 , reduce를 사용할 때 조건으로 필터링도 되는 느낌을 받았다

let maxNum = arr.reduce((acc, cur) => {
	if(cur.property === value){
    	return acc + cur.score;
    }
  		return acc;
}, 0)
		return maxNum;

27번

  • 문자열을 요소로 갖는 배열을 입력받아 가장 긴 문자열을 리턴
    • 객체는 dot notation으로 원하는 속성값에 접근할 수 있었는데,
      문자열로만 구성되어있는 배열에는 reduce로 어떻게 접근해야할지 고민이 됐었다.
      • 초기 값을 string으로 줄 때는 ''으로 해줘도 된다.
      • 길이가 같으면 앞에 값을 리턴해야하니까 이상으로 조건을 줘서 같을 경우는 acc를 리턴하면 된다.

28번

  • 문자열을 요소로 갖는 배열을 입력받아 가장 긴 문자열의 길이를 리턴
    • 길이를 비교해서 누적값이 크면 누적값의 길이를 리턴하고, 그렇지 않으면 현재값의 길이를 리턴한다고 코드를 짰는데 틀렸다.
      • }).length로 코드를 짜야 맞는 답이었다.

29번

  • 2차원 배열을 입력받아 배열들의 요소를 모두 담고 있는 단일 배열을 리턴해야한다.
    • concat을 사용할 생각은 하였는데 parameter가 하나 뿐이라 안에 넣어줄 값이 떠오르지 않았었다.
      • reduce를 사용해서 누적값배열 안에 현재 배열을 넣어서? 리턴하였다.
let output = joinArrayOfArrays([
  [1, 4],
  [true, false],
  ['x', 'y'],
]);

console.log(output); // --> [1, 4, true, false, 'x', 'y']

30번

  • 배열을 입력받아 배열에서 가장 짧은 길이를 가진 문자열 요소를 리턴
  • Cautions
    • 같은 길이의 요소가 있다면 앞쪽에 있는 요소 리턴. => 이하,이상 조건사용
    • 배열에는 문자열 외에 다른 요소들이 있을 수 있다. => 필터링먼저하고 그 변수를 가져오기.
    • 빈 배열을 입력받은 경우 , 빈 문자열을 리턴.
    • 주어진 배열에 문자열이 없다면, 빈 문자열 리턴.
      • filter로 문자열만 있는 배열로 만들어주고
      • 그 배열을 가져와서 가장 작은 문자열을 찾으려고 reduce를 사용한건 좋았는데, 조건을 코드로 짤 때, 빈 배열이 아니라 빈 문자열을 리턴하는 걸 착각했다. 그리고 acc,cur 구조를 아직 잘 이해 못 한 것 같다.

31번

function studentReports(students) {
  let onlyFemale = students.filter((el)=> {
    if(el.gender === 'female'){
      return true;
    }
      return false;
  })

  return onlyFemale.map((el) => {
    let num = el.grades.reduce((acc, cur) => {
      return acc + cur;
    }, 0)
    let avg = num / el.grades.length;
    el.grades = avg;
    return el;
  });
}
  • filter로 여학생들만 있는 배열로 바꿔준다.
  • 여학생들만 존재하는 배열을 map으로 가져오고(같은배열의길이), 그 안에서 grades 속성값만 reduce를 해서 모두 합쳐주고, 그 길이로 나눠준 값을 안에서 새로 선언한 변수에 할당해주고 grade속성값을 평균값으로 바꿔준 값으로 재할당 해준다.

32번 마지막문제

function sumOfArraysInArray(arr) {
  let oneArr = arr.reduce((acc, cur) => {
    return acc.concat(cur);
  })

  let onlyNum = oneArr.filter((el) => {
    if(typeof(el) === 'number'){
      return true;
    }
      return false;;
  })
  if(onlyNum.length === 0){
    return 0;
  }
  
  return onlyNum.reduce((acc, cur) => {
    return acc + cur;
  })
}
  • 우선 2차원 배열을 하나로 합쳐주고,
  • 하나로 합친 배열을 가져와서 number type만 있는 배열로 필터링을 해줬다.
    • 처음엔 조건을 주지 않았었는데 필터링한 배열이 빈 배열이면 0을 리턴하는 조건을 줘서 통과하지 못한 케이스를 충족시켰다.
  • number type만 있는 배열을 다시 reduce로 모든 값을 더해줘서 하나의 값으로 바꿔주었다.
profile
블록체인 개발자의 꿈을 위하여

0개의 댓글