자바스크립트 기초 6. 배열의 생성, 추가, 삭제
const fifthStudyLog = "배열의 생성, 추가, 삭제";
2. 생성, 수정(추가와 갱신), 삭제
2-1. 생성
배열을 생성하는 방식으로는 배열 리터럴 사용
, Array 생성자 함수 사용
, Array.of
, Array.from
이 있다.
- 배열 리터럴 사용
가장 일반적이고 간편한 방식이다. 대괄호로 요소들을 묶는 방식이다. (위에서 써왔던 방식)
- Array 생성자 함수
이때에는 인수의 개수에 따라서 다르게 동작한다. 인수의 개수가 하나인 경우
에는 아래처럼 자리만 존재하는 빈 배열을 만들어낸다.
const arr = new Array(10);
console.log(arr); // [undifned * 10]
console.log(arr.length); // 10
인수가 2개 이상이거나 숫자가 아닌 경우
인수를 요소로 갖는 배열을 생성한다.
new Array(1, 2, 3); //[1,2,3]
- Array.of
ES6에서 도입된 메서드로 전달된 인수를 요소로하는 배열을 생성한다.
Array.of("pineapple"); // ['pineapple']
- Array.from
마찬가지로 ES6에서 도임된 메서드로 유사배열 객체
또는 이터러블 객체
를 인수로 전달받아 배열로 변환하여 반환한다.
//유사 배열 객체
Array.from({ lengh: 2, 0: "apple", 1: "pineapple" }); // ['apple', 'pineapple']
//이터러블(문자열 포함)
Array.from("hello"); // ['h','e','l','l',o]
2-2. 추가와 갱신
배열에 요소를 추가
하는 방법은 간단하다. 값이 없는 인덱스
에 값을 할당
하면 추가된다.
const arr = ["apple", "pineapple"];
arr[2] = "orange";
// ['apple', pineapple', 'orange']
값의 갱신도 같은 방법으로 할 수 있다. 값 갱신을 원하는 자리의 인덱스를 이용하여 값을 재할당
하면 된다.
const arr = ["apple", "pineapple"];
arr[2] = "orange";
// ['apple', pineapple', 'orange']
arr[2] = "peach";
// ['apple', pineapple', 'peach']
갱신과 추가를 하기 위해서는 인덱스는 0 이상의 정수
(혹은 정수 형태의 문자열
)로 표현해야한다. 몇 가지의 언어에서는 인덱스에 음수를 넣으면 끝에서부터 순서대로 읽어주는데, Javasript
에서는 불가능한 동작이므로 혼동하지 말자!
const arr = [];
//가능
arr[0] = "apple";
arr["1"] = "pineapple";
//불가능
arr[-1] = 2;
arr["element"] = 4;
console.log(arr); // ["apple", "pineapple"]
2-3.삭제
- delete 연산자
배열의 특정 요소를 삭제하기 위해서는 delete 연산자
를 사용할 수 있다.
const arr = ["apple", "pineapple"];
delete arr[1]; // ["apple", undefined]
console.log(arr.length); // 2
다만 delete 연산자로 삭제하여도 length 프로퍼티
에서는 값이 변하지 않는다.
delete 연산자는 사용하지 않는 것이 좋다.
- Array.prototype.splice
배열에 빈자리를 만들지 않으면서 배열의 요소를 삭제하려면 splice메서드
를 사용하는 것이 좋다.
const arr = [1, 2, 3];
arr.splice(1, 1);
// splice(시작 인덱스, 삭제할 요소 수)
//[1,3]
console.log(arr); // 2
정리
배열은 큰 장점이 있다. 하나하나의 값을 변수 하나하나에 할당하는 것보다 묶을 수 있는 특징이 있는 값들은 배열에 모두 넣어서 요소로 취급하면 편리하다. 게다가 for문 등의 반복문 사용으로 순차적인 접근도 용이해진다는 면에서 프로그래밍을 하는 과정에서 필요한 문법 중 하나이다.
개인적으로 배열에서 중요한 내용(기억해야할 내용?) 메서드
라고 생각한다. 배열을 삭제하고 추가하고, 수정하는 다양한 메서드를 한 편으로 담기가 힘들어서 다음 스터디로그는 배열 메스드에 대해서 집중적으로 다뤄볼까한다.
<모던 자바스크립트 Deep Dive>
에서 읽은 내용 중, 나름 이해가 가능한 내용들만 정리하여 작성하였기에 아쉬운 부분이 많다. 희소배열
의 개념 등은 스스로가 더 레벨업된 다음에 다루는 것이 좋다고 생각하여 일단 스킵했다. (눈에 보이는 것을 이해해야 원리가 이해가 잘 되는 스타일이라…)
배열 메서드 이후에는 객체
에 대해서 다룰 것이다!