Search
Duplicate

배열, 2차원 배열

생성일
2023/02/06 10:30
태그
JS

배열 선언

let arr = new Array(); let arr = [];
JavaScript
복사
대괄호 안에 초기 요소를 넣어주는 것도 가능
let fruits = ["apple", "orange", "banana"];
JavaScript
복사
배열 내 특정 요소를 얻고 싶다면, 대괄호 안에 순서를 나타내는 숫자인 인덱스를 넣어주면 된다
let fruits = ["apple", "orange", "banana"]; alert( fruits[0] ); // apple alert( fruits[1] ); // orange alert( fruits[2] ); // banana
JavaScript
복사
요소 수정 가능
fruits[2] = 'pear'; fruits[3] = 'lemon';
JavaScript
복사
배열 길이, 전체 출력
let fruits = ["apple", "orange", "banana"]; alert( fruits.length ); // 3 alert( fruits ); // apple, orange, banana
JavaScript
복사

배열 요소의 자료형엔 제약이 없다

let arr = ['apple', {name:'이보라'}, true, function() {alert('hello');}]; // 요소에 여러가지 자료형이 섞여 있다 alert(arr[1].name); // 이보라 arr[3](); // hello
JavaScript
복사

trailing 쉼표

let fruits = [ "apple", "orange", "banana", ];
JavaScript
복사

pop, push와 shift, unshift

1.
큐는 배열을 사용해 만들 수 있는 대표적인 자료구조로서, 배열과 마찬가지로 순서가 있는 컬렉션을 저장하는데 사용한다. 큐에서 사용하는 주요 연산은 push, shift가 있다.
push - 맨 끝에 요소를 추가한다
shift - 제일 앞 요소를 꺼내 제거한 후, 남아있는 요소들을 앞으로 밀어준다. 이렇게 하면 두번째 요소가 첫번째 요소가 된다
let fruits = ["사과", "오렌지", "배"]; alert( fruits.shift() ); // 배열에서 "사과"를 제거하고 제거된 요소를 얼럿창에 띄웁니다. alert( fruits ); // 오렌지,배 ///////////////////////////// let fruits = ["오렌지", "배"]; fruits.unshift('사과'); alert( fruits ); // 사과,오렌지,배 ///////////////////////////// let fruits = ["사과"]; fruits.push("오렌지", "배"); fruits.unshift("파인애플", "레몬"); // ["파인애플", "레몬", "사과", "오렌지", "배"] alert( fruits );
JavaScript
복사
2.
스택에서 사용하는 연산 - push, pop
push - 요소를 스택 끝에 집어 넣는다
pop - 스택 끝 요소를 추출한다
let fruits = ["사과", "오렌지", "배"]; alert( fruits.pop() ); // 배열에서 "배"를 제거하고 제거된 요소를 얼럿창에 띄웁니다. alert( fruits ); // 사과,오렌지 ///////////////////////////// let fruits = ["사과", "오렌지"]; fruits.push("배"); alert( fruits ); // 사과,오렌지,배
JavaScript
복사

new Array()로 배열 만들기

let arr = new Array("apple", "pear", "lemon");
JavaScript
복사

다차원 배열

배열 역시 배열의 요소가 될 수 있다. 다차원 배열은 행렬을 저장하는 용도로 쓰인다
let matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; alert( matrix[1][1] ); // 5, 중심에 있는 요소
JavaScript
복사

toString

배열엔 toString 메소드가 구현되어 있어, 이를 호출하면 요소를 쉼표로 구분한 문자열이 반환된다
let arr = [1, 2, 3]; alert(arr); // 1, 2, 3 alert(String(arr) === '1, 2, 3'); // true alert( [] + 1 ); // "1" alert( [1] + 1 ); // "11" alert( [1, 2] + 1); // "1, 21"
JavaScript
복사

배열의 초기화 방법

Array.from()으로 길이가 5인 배열 생성 및 0으로 초기화

const arr = Array.from({length: 5}, () => 0); // => Array(5) [0, 0, 0, 0, 0]
JavaScript
복사

Array.from()의 두번째 매개변수로 원하는 값을 반환하는 콜백함수를 넘겨주어 값이 1씩 증가하는 배열도 생성할 수 있다

const arr = Array.from({length: 5}, (v, i) => i); // => Array(5) [0, 1, 2, 3, 4]
JavaScript
복사

Array.fill() 이용

배열의 시작 인덱스 부터 끝 인덱스의 이전까지 정적인 값 하나로 채운다
ES6에서 등장한 fill을 이용한 방법은 for문을 이용하는 방법과 성능 면에서도 크게 차이가 없고 코드가 간결하다.
따라서 일반적인 경우 가장 선호되는 방식
new Array(N)은 속도가 느리기 때문에, 다음과 같은 방법을 사용하는 것이 더 빠른다
let arr; (arr = []).length = 5; arr.fill(0); const arr = new Array(5).fill(0); // => Array(5) [0, 0, 0, 0, 0]
JavaScript
복사

Array.apply() 이용

const arr = Array.apply(null, new Array(5)).map(Number.prototype.valueOf, 0); // -> Array(5) [0, 0, 0, 0, 0]
JavaScript
복사

2차원 배열

자바스크립트는 진정한 2차원 배열은 없다
let arr = [][]; 이와 같은 한 번에 2차원 배열 선언이 불가능하다
약간의 트릭을 통하여 2차원 배열과 비슷한 배열을 만들 수 있다
자바스크립트의 배열은 객체(함수)이며, new Array()를 사용할 수 있다
new Array()의 첫번째 매개변수로 배열의 길이를 넘겨서 특정 길이로 배열을 생성할 수 있다

2차원 배열 생성 및 0으로 초기화

const rows = 5; const columns = 5; const arr = Array.from(new Array(columns), () => new Array(rows).fill(0));
JavaScript
복사

1씩 증가하는 2차원 배열 생성

// 1 const arr1 = Array.from({ length: 5 }, (v, r) => { return Array.from({ length: 5 }, (v, c) => (r * 5) + (c + 1)) }); // 2 const arr2 = Array.from(new Array(rows), () => new Array(columns).fill(1)).map((row, r) => row.map((v, c) => (r * columns) + (c + 1))); // 3, BEST const arr3 = [...Array(rows)].map((v, r) => [...Array(columns)].map((v, c) => (r * columns) + (c + 1)));
JavaScript
복사
세가지 모두 동일한 결과
Array(5) [Array(5), Array(5), Array(5), Array(5), Array(5)] [ 0: (5) [1, 2, 3, 4, 5], 1: (5) [6, 7, 8, 9, 10], 2: (5) [11, 12, 13, 14, 15], 3: (5) [16, 17, 18, 19, 20], 4: (5) [21, 22, 23, 24, 25] ] length: 5
Plain Text
복사

간단한 2차원 배열

const row = 10; const cell = 10; const candidate = Array(row * cell).fill().map((arr, i) => { return i; });
C++
복사
output
1.
(100) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
a.
0: 0
b.
1: 1
c.
2: 2
d.
3: 3
e.
4: 4
f.
5: 5
g.
6: 6
h.
7: 7
i.
8: 8
j.
9: 9
k.
10: 10
l.
11: 11
m.
12: 12
n.
13: 13
o.
14: 14
p.
15: 15
q.
16: 16
r.
17: 17
s.
18: 18
t.
19: 19
u.
20: 20
v.
21: 21

2차원 → 1차원으로

ex)

data // 2차원 배열 data.flat() // (16) [0, 0, 0, 0, 0 ~ 0, 0] data.flat().filter((v) => v === 0) // (16) [0, 0, 0, 0, 0 ~ 0, 0]
JavaScript
복사