home강의 홈으로
Section 7. 배열
Lesson 2. 배열의 기본 메서드들

👉 MDN 문서 보기


I. 특정 값을 반환하는 기본 메서드들

1. (정적) isArray - 배열인지 여부를 반환

console.log( Array.isArray([1, 2, 3]), Array.isArray('123'), Array.isArray('123'.split('')) );

💡 instanceof Array와의 차이

const arrays = [ [], [1, 2, 3], new Array(), // ⚠️ instanceof에서는 결과가 다름 Array.prototype // 배열임 ]; const notArrays = [ 1, 'abc', true, null, {} ]; for (const item of arrays) { console.log( item, Array.isArray(item), item instanceof Array ); } for (const item of notArrays) { console.log( item, Array.isArray(item), item instanceof Array ); }

2. at - 주어진 인자를 인덱스로 값을 반환

  • ⭐️ 음수를 사용하여 뒤에서부터 접근 가능
const arr = [ '한놈', '두시기', '석삼', '너구리', '오징어' ]; console.log( arr.at(1), arr.at(2) ); console.log( arr.at(-1), arr.at(-2) );

3. includes - 인자로 주어진 요소 유무 확인

const arr = [1, 2, 3, 'abc', true]; console.log( arr.includes(2), arr.includes('abc'), arr.includes(true), ); console.log( arr.includes(4), arr.includes('가나다'), arr.includes(false) );

⚠️ 참조형 데이터의 경우

const obj1 = { x: 1, y: 2 }; const obj2 = { x: 1, y: 2 }; const arr = [ obj1, { x: 3, y: 4 } ]; console.log( arr.includes(obj1), arr.includes(obj2), arr.includes({ x: 1, y: 2 }), arr.includes({ x: 3, y: 4 }) );

4. indexOf, lastIndexOf - 앞/뒤에서 첫 번째 값의 인덱스 반환

  • 없을 시 -1 반환
const arr = [1, 2, 3, 2, 1]; console.log( arr.indexOf(2), arr.lastIndexOf(2), arr.indexOf(4) );

5. join - 인자로 주어진 값으로 구분하여 요소들을 문자열로 연결하여 반환

const arr1 = ['a', 'b', 'c', 'd', 'e']; const arr2 = [ 1, true, null, undefined, '가나다', { x: 0 }, [1, 2, 3] ]; console.log( arr1.join() // 인자가 없다면 쉼표`,`로 ); console.log( arr1.join('') ); console.log( arr1.join(' ') ); console.log( arr2.join(':') );


console.log( classIntro(3, '김민지', '영희', '철수', '보라') ); // 호이스팅 function classIntro (classNo, teacher, ...children) { // [ 4-3강 예제 ] // let childrenStr = ''; // for (const child of children) { // if (childrenStr) childrenStr += ', '; // childrenStr += child; // } // return `${classNo}반의 선생님은 ${teacher}, ` // + `학생들은 ${childrenStr}입니다.` return `${classNo}반의 선생님은 ${teacher}, ` + `학생들은 ${children.join(', ')}입니다.` }



II. 배열을 변경하는 기본 메서드들

1. push, unshift - 배열에 값을 추가

  • 결과의 길이를 반환

a. push - 값을 뒤에 추가

const arr = [1, 2, 3]; const x = arr.push(4); console.log(x, arr); const y = arr.push(5, 6, 7); // 최종 길이 반환 console.log(y, arr);

b. unshift - 값을 앞에 추가

const arr = [5, 6, 7]; const x = arr.unshift(4); console.log(x, arr); const y = arr.unshift(1, 2, 3); console.log(y, arr);

특징과 비교

  • 수정된 배열의 길이를 반환
  • 부수효과 - 원본 배열을 변경 배열 마지막 강에 배울 스프레드 문법을 보다 권장
  • 💡 push보다 unshift가 더 느림 - 이후 요소들을 밀어내야 하므로


2. pop, shift - 배열에서 값을 제거하여 반환

a. pop - 값을 뒤에서 제거하여 반환

const arr = [1, 2, 3, 4, 5]; const x = arr.pop(); console.log(x, arr); const y = arr.pop(); console.log(y, arr);

b. shift - 값을 앞에서 제거하여 반환

const arr = [1, 2, 3, 4, 5]; const x = arr.shift(); console.log(x, arr); const y = arr.shift(); console.log(y, arr);
  • 💡 pop보다 shift가 더 느림 - 이후 요소들을 당겨야 하므로


3. splice - 원하는 위치에 요소(들)을 추가 및 삭제

2개 이상의 인자를 받음

  • start : 배열 변경을 시작할 위치
  • deleteCount : 제거할 요소의 개수
  • item(s) : 추가할 하나 이상의 요소
const arr = [1, 2, 3, 4, 5, 6, 7]; // 2번 인덱스부터 2개 요소 제거 arr.splice(2, 2); console.log(arr); // 3번 인덱스부터 요소 제거 없이 'a' 추가 arr.splice(3, 0, 'a'); console.log(arr); // 1번 인덱스부터 3개 요소 제거 후 '가', '나', '다' 추가 arr.splice(1, 3, '가', '나', '다'); console.log(arr);

⚠️ 배열의 delete - empty 값을 남김

const arr = [1, 2, 3, 4, 5]; delete arr[2]; console.log(arr); // 💡 때문에 배열의 값 삭제에는 splice 사용 arr.splice(2, 1); console.log(arr);

4. fill - 배열을 특정 값으로 채움

// 중간의 빈 값도 채움 const arr1 = [1, 2, , , 4, 5]; arr1.fill(7); console.log('1.', arr1); // 💡 특정 값으로 채운 배열 생성시 유용 const arr2 = new Array(10); arr2.fill(1); console.log('2.', arr2); // 인자가 둘일 때: (채울 값, ~부터) arr2.fill(2, 3); console.log('3.', arr2); // 인자가 셋일 때: (채울 값, ~부터, ~ 전까지) arr2.fill(3, 6, 9); console.log('4.', arr2);

5. reverse - 배열의 순서를 뒤집음

const arr = [1, 2, 3, 4, 5, 6, 7]; console.log(arr);

// 💡 메서드 자체도 뒤집힌 배열을 반환 arrRev = arr.reverse(); // 원본 배열 뒤집힘 console.log(arr, arrRev); arrRev[0] = 0; // ⭐ 반환된 배열은 원본과 같은 배열을 참조! (복사가 아님) console.log(arr, arrRev);



III. 새 배열을 반환하는 기본 메서드들

  • ⭐️ 원본 배열을 수정하지 않음
  • 얕은 복사본

1. concat - 배열에 다른 배열이나 값을 이어붙인 결과를 반환

const arr1 = [1, 2, 3]; const arr2 = ['a', 'b', 'c']; const arr3 = [true, false]; const arr4 = arr1.concat(arr2); console.log(arr4); const arr5 = arr1.concat(arr2, 3); console.log(arr5); const arr6 = arr1.concat('ABC', arr2, arr3, 100); console.log(arr6); // ⭐️ 원본 배열들에는 변화 없음 console.log(arr1, arr2, arr3);
  • 해당 배열 뒤로 인자로 하나 이상 주어진 다른 배열이나 값을 이어붙인 결과를 반환


2. slice - 인자로 주어진 범주의 값을 잘라 반환

1~2개 인자를 받음

  • begin : 시작 위치
  • end : 종료 위치
const arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const arr2 = arr1.slice(3); const arr3 = arr1.slice(3, 7); console.log(arr2, arr3); // 원본에는 변화 없음 console.log(arr1);

3. flat - 인자로 주어진 깊이만큼 배열을 펼쳐 반환

💡 flat 평평하게 한다는 의미

[ 1, [2, 3], [4, 5, 6], 7 ] ↓ ↓ ↓ [ 1, 2, 3, 4, 5, 6, 7 ] const orgArr = [ 1, 2, [3, 4], [5, [6, [7, 8]]] ]; // 인자가 없으면 1을 넣은 것과 같음 const arr0 = orgArr.flat(); const arr1 = orgArr.flat(1); const arr2 = orgArr.flat(2); const arr3 = orgArr.flat(3); console.log('N:', arr0); console.log('1:', arr1); console.log('2:', arr2); console.log('3:', arr3); // 원본에는 변화 없음 console.log('org:', orgArr);

💡 위의 메서드들은 얕은 복사

const orgArr = [ 1, { x: 2 }, [{ x: 3 }, {x: 4}], 5 ]; const arr1 = orgArr.concat(6); const arr2 = orgArr.slice(0, 3); const arr3 = orgArr.flat(); orgArr[0] = 0; orgArr[1].x = 20; orgArr[2][0].x = 30; console.log(orgArr); console.log(arr1); console.log(arr2); console.log(arr3);
  • 원시값과 참조값 비교

🤔얄코에게 질문하기질문은 반.드.시 이리로 보내주세요! ( 강의사이트 질문기능 ✖ )

강의에서 이해가 안 되거나 실습상 문제가 있는 부분,
설명이 잘못되었거나 미흡한 부분을 메일로 알려주세요!

답변드린 뒤 필요할 경우 본 페이지에
관련 내용을 추가/수정하도록 하겠습니다.

이메일 주소
yalco@yalco.kr
메일 제목 (반드시 아래 제목을 붙여넣어주세요!)
[질문] 제대로 파는 자바스크립트 (무료 파트) 7-2

🛑질문 전 필독!!

  • 구글링을 먼저 해 주세요. 들어오는 질문의 절반 이상은 구글에 검색해 보면 1분 이내로 답을 찾을 수 있는 내용들입니다.
  • 오류 메시지가 있을 경우 이를 구글에 복붙해서 검색해보면 대부분 짧은 시간 내 해결방법을 찾을 수 있습니다.
  • 강의 페이지에 추가사항 등 놓친 부분이 없는지 확인해주세요. 자주 들어오는 질문은 페이지에 추가사항으로 업데이트됩니다.
  • "유료파트의 강의페이지는 어디 있나요?" - 각 영상의 시작부분 검은 화면마다 해당 챕터의 강의페이지 링크가 있습니다.
  • 질문을 보내주실 때는 문제가 어떻게 발생했고 어떤 상황인지 등을 구체적으로 적어주세요. 스크린샷을 첨부해주시면 더욱 좋습니다.
🌏 Why not change the world?