[Til] 9/2 고차함수 문제

이종원·2020년 9월 3일
1

문제는 이렇다 2차원 배열을 입력받아 모든수의 합을 리턴한다
일단 나누어서 생각해보았다

  1. 입력받은 배열을 1차원 함수로 만들기
    • concat() 과 reduce() 사용하기
  2. 입력받은 배열 안에 숫자 제외한 나머지를 제거 하기
    • filter 를 사용하고 조건을 넣자
  3. 배열의 요소를 모두 더한다
    • reduce 요소를 더하자
function sumOfArraysInArray(arr) {
let concat1 = arr.reduce(function( acc, cur){
  return acc.concat(cur)
}) 
// concat1 으로 변수를 선언하고 배열을 reduce()한다 
// 리턴값으로 concat() 사용해서 acc 배열에 cur 배열을 넣어줌 으로 2차원 배열을 1차원으로 만들기

let onlynum = concat1.filter(function(el){
  if(typeof(el) === 'number'){
    return true
  } else{
    return false
  }
}) 
// 1차원 배열로 만든 concat1에 filter()을 사용해서 숫자를 제외한 나머지를 거른다
// 조건문을 사용하여 typeof() 사용하여 배열안에 요소가 숫자면 리턴값으로 가져온다
// else 리턴을 나머지를 거른다


let result = onlynum.reduce(function(acc, cur){
  return acc + cur
},0)
return result
}
// result를 변수 선언하고 숫자만 남은 onlynum에 reduce()을 사용함으로 배열의 요소의 값을 더한다
// 다 모든 것이 처리된 result를 리턴값을 선언 한다


let output = sumOfArraysInArray([
  [1, 2],
  [undefined, 4, '5'],
  [9, 'hello'],
]);
console.log(output); // --> 16

결론
이 문제를 풀면서 쪼개면서 생각 하는것도 중요했지만 처리 해야할 순서 또한 정말 중요했다
이 문제를 실수 했던 점은 필터를 먼저 처리하고 1차원 배열로 만들어 줬었다

0개의 댓글