1. 문제
정수 배열 numbers가 매개변수로 주어집니다.
numbers의 각 원소에 두 배한 원소를 가진 배열을
return하도록 solution 함수를 완성해주세요.
let numbers = [1, 2, 3, 4, 5]
2. 풀이방식
내가 이 문제를 보고 들었던 풀이방식은
'for문을 돌려서 두 배씩 곱하면 되겠다'
라고 생각이 들었다.
function solution1(numbers) {
var answer = [];
for (let i = 0; i < numbers.length; i++) {
let x = numbers[i] * 2;
answer.push(x)
}
return answer;
}
3. 해설
다 풀고 제출 후 다른 사람들의 풀이를 보니
배울 점이 많았다.
2가지 방법이 있었는데,
reduce와 map()이었다.
(1) reduce
function solution2(numbers) {
return numbers.reduce((a, b) => [...a, b * 2], []);
}
처음에 보고 '뭔소리지..'했다가
reduce의 사용법을 한참 읽고서야 이해되었다.
하나하나 풀어가면,
- reduce라는 함수는 2개의 파라미터를 받는데
- 첫 번째는 callback function, 두 번째는 initialValue(Optional)이다.
- 첫 번째 파라미터인 callback function은 4가지의 인수를 가지고 있다.
- accumlator : callback 함수의 반환값을 누적
- currentValue : 배열의 현재 요소
- index(Optional) : 배열 현재 요소의 인덱스
- array(Optional) : 호출한 배열
- 두 번째 파라미터 initialValue 는 초기값을 설정하는 것이었다.
이제 저 코드를 이해하면,
- 초기값으로 빈 배열을 설정하고
- reduce 매개변수에 a (accumulator), b (currentValue)를 넣었다
- b 배열에 차례로 * 2를 하고 a에 누적을 시키는데
- ...(spread operator)를 통해 배열에 풀어서 전달하도록 코드를 짠 것 같다.
(2) map()
const solution3 = numbers.map((number) => number * 2)
map () 함수는 값과 인덱스를 받아
자동으로 for문을 돌려 값을 빼도록 해준다.
여기서 중요한건 기존 배열을 변경하지 않고 새로운 배열을 생성한다는 것이다.
'개발일지' 카테고리의 다른 글
TIL - 2023.10.26. 네비바CSS, 커밋충돌 (0) | 2023.10.26 |
---|---|
스크롤 위치에 따라 네비바 요소 변경하기 (0) | 2023.10.25 |
2023.10.23. TIL JavaScript 3주차 (2) (1) | 2023.10.23 |
2023.10.20. TIL JavaScript 3주차 (1) 데이터 타입 (0) | 2023.10.20 |
CSS 그리드(grid) 양쪽 여백 남기고 중앙정렬하는 법 (1) | 2023.10.19 |