문제는 이렇다 2차원 배열을 입력받아 모든수의 합을 리턴한다
일단 나누어서 생각해보았다
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차원 배열로 만들어 줬었다