JS 3.1 · 3부. 데이터 다루기

배열 기초

여러 값을 순서대로 담고, 인덱스로 꺼내고 넣습니다.

예상 학습 시간 14분 실행 단추가 있는 예제는 고쳐서 실행해 볼 수 있습니다 난이도 입문
개념 설명

여러 값을 순서대로 담습니다

변수 하나에는 값 하나가 들어갑니다. 장바구니에 담긴 상품처럼 여러 개를 다루려면 배열(array) 을 사용합니다. 2.3 의 나머지 매개 변수에서 잠깐 본 그것입니다.

대괄호 안에 쉼표로 구분해 적습니다. 자리마다 번호가 붙는데 0부터 셉니다.

최소 예제 · 편집 가능

만들고 꺼내기

script.js
const fruits = ["사과", "바나나", "포도"];

console.log(fruits);
console.log(fruits.length);
console.log(fruits[0]);
console.log(fruits[2]);
출력
["사과", "바나나", "포도"] 3 사과 포도

length 는 개수이고 번호는 0부터이므로, 마지막 번호는 언제나 length - 1 입니다. 없는 번호를 꺼내면 undefined 가 나옵니다.

상세 사용법

넣고 빼기

뒤에 넣는 것이 push, 뒤에서 빼는 것이 pop 입니다. 앞쪽은 unshiftshift 입니다.

script.js
const cart = [];

cart.push("연필");
cart.push("공책");
console.log(cart);

const last = cart.pop();
console.log(last);
console.log(cart);
출력
["연필", "공책"] 공책 ["연필"]

pop 은 뺀 값을 돌려주고 배열에서는 지웁니다. push 는 넣은 뒤의 개수를 돌려줍니다.

상세 사용법

들어 있는지 확인하기

script.js
const items = ["연필", "공책", "지우개"];

console.log(items.indexOf("공책"));
console.log(items.indexOf("가위"));
console.log(items.includes("지우개"));
console.log(items.includes("가위"));
출력
1 -1 true false

indexOf 는 번호를 돌려주고 없으면 -1 입니다. 들어 있는지만 알고 싶다면 includes 가 읽기 좋습니다.

상세 사용법

const 인데 바뀝니다

const 로 선언한 배열에도 값을 넣고 뺄 수 있습니다. 다시 넣지 못하는 것은 배열 자체이지 그 안의 값이 아니기 때문입니다.

script.js
const list = [1, 2];

list.push(3);
console.log(list);

list = [4];
출력 · 크롬
[1, 2, 3] TypeError: Assignment to constant variable.
출력 · 파이어폭스
[1, 2, 3] TypeError: invalid assignment to const 'list'

그래서 배열은 대개 const 로 선언합니다. 내용은 바뀌어도 그 배열을 다른 것으로 바꿔치기하는 일은 드뭅니다.

흔한 실수

처음에 자주 걸리는 것

1. 번호를 1부터 셉니다

첫 값은 [0] 입니다. [1] 은 두 번째입니다.

2. 마지막을 length 로 꺼냅니다

items[items.length] 는 없는 자리라 undefined 입니다. 마지막은 items[items.length - 1] 입니다.

3. indexOf 의 결과를 참·거짓으로 씁니다

첫 번째 값이면 0 이 나오는데 0 은 거짓입니다(1.7). 있는데 없다고 판정됩니다. includes 를 사용하거나 !== -1 로 비교하세요.

if (items.indexOf("연필")) { }        // 첫 번째면 거짓입니다
if (items.includes("연필")) { }       // 이렇게 적습니다
실습 문제

직접 해보기

1. 장바구니 다루기 난이도 하

빈 배열을 만들어 상품 셋을 넣고, 개수와 마지막 상품을 출력하세요.

const cart = []; cart.push("연필"); cart.push("공책"); cart.push("지우개"); console.log(cart.length); console.log(cart[cart.length - 1]);
2. 있으면 알리고 없으면 넣기 난이도 중

상품 이름을 받아, 배열에 이미 있으면 "이미 담겨 있습니다" 를 출력하고 없으면 넣는 함수를 만드세요.

const cart = ["연필"]; function addOnce(item) { if (cart.includes(item)) { console.log("이미 담겨 있습니다"); return; } cart.push(item); } addOnce("공책"); addOnce("연필"); console.log(cart);
요약

이 단원의 정리

  • 배열은 여러 값을 순서대로 담습니다. 번호는 0부터 셉니다.
  • 마지막 번호는 length - 1 입니다.
  • push · pop 은 뒤, unshift · shift 는 앞입니다.
  • 들어 있는지는 includes, 자리는 indexOf 로 봅니다.
  • const 배열도 값은 넣고 뺄 수 있습니다. 바꾸지 못하는 것은 배열 자체입니다.