JavaScript의 배열 구조 분해 문법은 배열에서 값을 꺼내 각각 다른 변수에 할당하는 간결한 방법이에요.
다음 예제에서는 numberOfMoons 배열의 각 값이 해당하는 행성에 할당돼요:
const numberOfMoons = [0, 2, 14];
const [venus, mars, neptune] = numberOfMoons;
neptune;
// => 14
정리하면:
JavaScript에는 객체에서 속성을 꺼내 각각 다른 변수에 할당하는 구조 분해 문법도 있어요.
다음 예제에서는 weather 객체에서 날씨 기호를 꺼내요:
const weather = {
sun: '☀️',
sun_behind_small_cloud: '🌤️',
sun_behind_cloud: '⛅',
sun_behind_large_cloud: '🌥️',
sun_behind_rain_cloud: '🌦️',
cloud: '☁️',
cloud_with_rain: '🌧️',
cloud_with_snow: '🌨️',
cloud_with_lightning: '🌩️',
cloud_with_lightning_and_rain: '⛈️',
};
const { sun, cloud, cloud_with_lightning: thunder } = weather;
sun;
// => '☀️'
cloud;
// => '☁️'
thunder;
// => '🌩️'
정리하면:
마술사 지망생 Elyse는 훈련을 계속해요. Elyse에게는 조작하고 싶은 카드 덱이 있어요.
일을 더 쉽게 하기 위해 보통은 2부터 10까지의 숫자가 적힌 카드로만 시작하지만, 어떤 마술에는 추가 (그림) 카드가 등장하기도 해요.
카드를 섞는 방법은 아주 많지만, 마술의 환상을 유지하려면 어떤 단일한 방법도 사용하지 않는 것이 중요해요. 예를 들어 Elyse는 splice, slice, shift, unshift, push, at을 사용하지 않아요.
배열 접근자 array[index]와 객체 접근자(object[key] 및 object.key) 역시 절대 사용하면 안 돼요.
Elyse가 마술 실력을 키우도록 도와주고 싶나요?
모든 함수는 매개변수와 단일 return expression이 있는 함수 본문을 사용해 구현할 수 있어요.
Elyse는 array[index], .at(index), .shift()를 사용하지 않고 덱의 첫 번째 카드를 불러와요.
정말 마법 같아요.
const deck = [5, 9, 7, 1, 8];
getFirstCard(deck);
// => 5
Elyse는 손재주를 부려 array[index]나 .shift()를 사용하지 않고 덱의 두 번째 카드를 불러와요.
const deck = [3, 2, 10, 6, 7];
getSecondCard(deck);
// => 2
Elyse는 덱의 두 카드 위치를 서로 바꿔요. 함수를 하나도 호출할 필요가 없어요.
const deck = [10, 7];
swapTwoCards(deck);
// => [7, 10]
좀 더 현란한 손재주를 부리기 위해, Elyse는 카드 세 장을 집어 맨 위 카드를 재빨리 맨 뒤로 옮겨서 가운데 카드가 첫 번째 카드가 되고, 원래 맨 아래 카드가 가운데 카드가 되게 해요. 함수를 하나도 호출할 필요가 없어요.
const deck = [2, 6, 10];
shiftThreeCardsAround(deck);
// => [6, 10, 2]
Elyse는 덱을 두 더미로 나눠요.
그다음 관객에게 두 더미 중 하나를 고르게 하는데, 이것을 chosen이라고 부를게요.
disregarded 더미는 더 이상 중요하지 않으므로, Elyse는 이 더미를 사라지게 만들어요.
함수를 하나도 호출할 필요가 없어요.
const deck = [5, 4, 7, 10];
const chosen = [5, 4];
const disregarded = [7, 10];
pickNamedPile({ chosen, disregarded });
// => [5, 4]
안타깝게도 관객은 계속 "잘못된" 더미를 고르지만, 빠르고 영리한 마술로 Elyse는 chosen 더미의 이름을 disregarded로, disregarded 더미의 이름을 chosen으로 바꿔요.
함수를 하나도 호출할 필요가 없어요.
const deck = [5, 4, 7, 10];
const chosen = [5, 4];
const disregarded = [7, 10];
swapNamedPile({ chosen, disregarded });
// => { chosen: [7, 10], disregarded: [5, 4] }
Exercism에 가입하고 JavaScript 트랙을 개념 37개연습 문제 159개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.