배열 선언
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
복사