프로그래머스 배열 두배 만들기 자바스크립트 | Array.prototype.map()

Chaeyeon Lee·2023년 5월 19일
0

🔅 1. 아이디어

이 문제를 풀 당시에는 for문으로 순회하면서 각 원소에 2배를 해줬는데, 지금 다시 푼다면 map을 써볼 것 같다.

🧑‍💻 2. 내 코드

function solution(numbers) {
    for(let i=0; i<numbers.length; i++){
        numbers[i]*=2;
    }
    return numbers;
}

🐣 3. 개념

📌 Array.prototype.map()

위 메서드는 배열 내의 모든 요소 각각에 대해 주어진 함수를 호출한 결과를 모아 '새로운 배열'을 반환한다.

function solution(numbers) {
    return numbers.map(e=>e*2);
}
arr.map(callback(currentValue[, index[, array]])[, thisArg])

1. currentValue: 처리할 현재 요소
2. index(option): 처리할 현재 요소의 인덱스
3. array(option): map()을 호출한 배열

콜백함수는 배열 값이 들어있는 인덱스에 대해서만 호출된다.
즉, 함수 호출 후에 값이 삭제되거나 아직 값이 할당/정의되지 않은 인덱스에는 호출되지 않는다!
map()은 새로운 배열을 반환하기 때문에 원본 배열을 변형하지 않는다.

var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots는 [1, 2, 3]
// numbers는 그대로 [1, 4, 9]

객체 배열도 재구성할 수 있다.

var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots는 [1, 2, 3]
// numbers는 그대로 [1, 4, 9]

map()을 활용한 배열원소의 길이

https://blog.naver.com/lcyeon46/223087120945

map()을 활용한 문자 반복 출력

https://blog.naver.com/lcyeon46/223087751613

map()을 활용한 외계행성의 나이

https://blog.naver.com/lcyeon46/223087935465


reduce()를 활용한 풀이도 있더라

function solution(numbers) {
    return numbers.reduce((a, b) => [...a, b * 2], []);
}

//spread연산자
const animals = ['개', '고양이', '참새'];
const anotherAnimals = [...animals, '비둘기'];
console.log(animals);
//['개', '고양이', '참새']
console.log(anotherAnimals);
//['개', '고양이', '참새', '비둘기']

우선 하나의 배열로도 반환이 될 수 있다는 것을 알았고, a는 배열로써 어떤 값을 누적하게 되는데...
예를 들어 [0, 1, 2, 3]라는 배열에 대해 위 코드를 적용한다면,

callbackaccumulatorcurrentValuecurrentIndexarray반환 값
1번째 호출[][0]0[0, 1, 2, 3][0]
2번째 호출[0][2]1[0, 1, 2, 3][0, 2]
3번째 호출[0, 2][4]2[0, 1, 2, 3][0, 2, 4]
4번째 호출[0, 2, 4][6]3[0, 1, 2, 3][0, 2, 4, 6]

이렇게 된다!
아직 reduce랑 spread 연산자에 익숙하지 않아서 이해하는 데에 좀 걸렸다.

reduce() 정리글



출처
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map

profile
프론트엔드 개발자 지망생

0개의 댓글