블로그 하기전 읽고 지나가버려서 다시 복습, 정의정리할겸 작성함.
여러 값을 순서대로 저장할 수 있는 객체 타입으로,
각 값에는 0부터 시작하는 인덱스가 할당됨.
배열을 사용하면 여러 데이터를 하나의 변수에 그룹화하여 관리할 수 있음
리터럴 방식: 가장 간단하고 일반적인 배열 생성 방법.
기본문법
let fruits = ["사과", "오렌지", "자두"];
new Array() 생성자: 이 방법은 new 키워드와 함께 Array 객체를 생성.
기본문법
let fruits = new Array('사과', '바나나', '체리');
let fruits = ["사과", "오렌지", "자두"];
console.log( fruits[0] ); // 사과
console.log( fruits[1] ); // 오렌지
console.log( fruits[2] ); // 자두
fruits[0] = "바나나"; //fruits변수 0번 인덱스 사과 대신 바나나를 대입함.
console.log( fruits[0] ); // 바나나
fruits[3] = "레몬"; //fruits변수 3번 인덱스는 없는 상태.
//여기에 요소를 새롭개 추가할수도 있음
console.log( fruits[3] ); // 레몬
console.log(fruits.length); // 4. length를 사용하면 요소 갯수도 알수 있음.
console.log(fruits); // 바나나, 오렌지, 자두, 레몬
let arr = ['사과',
{
name: '이보라',
age: 30
},
true,
function(){
console.log('안녕하세요.');
}
];
console.log(arr[1].name); // 이보라. 인덱스가 1인 요소(이 예시에선 객체)의 name 프로퍼티를 출력.
arr[3](); // 안녕하세요. 인덱스가 3인 요소(이 예시에선 함수)를 실행.
배열은 배열의 요소가 될 수 있음.
이러한 구조는 주로 행렬이나 데이터 테이블을 표현할 때 사용
let matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
console.log(matrix[0][1]); // 2
console.log(matrix[1][0]); // 4
console.log(matrix[2][2]); // 9
matrix[0][0] = 10; // 첫번째행 0번인덱스, 첫번째열 0번인덱스 배열요소 수정
console.log(matrix[0][0]); // 10
배열을 직접 수정하는 메서드들
pop·push >> 배열 뒷부분 관련. 단순히 뒷부분 추가제거라서 빠르고 효율적임.
shift·unshift >> 배열 앞부분 관련. 기존배열 인덱스 값들이 변경됨
배열에 요소가 많은 경우 요소들 이동하는시간이 길어지고 메모리관련 연산도 많아짐.
배열의 마지막 요소를 제거하고, 그 요소를 반환. 배열이 비어있으면 undefined를 반환
let fruits = ["사과", "오렌지", "배"];
console.log(fruits.pop()); // 배열에서 "배"를 제거후 그 요소를 콘솔창에 띄움
console.log(fruits); // 사과,오렌지
배열의 끝에 하나 이상의 요소를 추가하고, 변경된 배열의 길이를 반환
let fruits = ["사과", "오렌지"];
fruits.push("배");
console.log( fruits ); // 사과,오렌지,배
배열의 첫 번째 요소를 제거하고, 그 요소를 반환. 배열이 비어있으면 undefined를 반환.
이 작업은 배열의 모든 요소가 한 칸씩 앞으로 이동
let fruits = ["사과", "오렌지", "배"];
console.log(fruits.shift()); // 배열에서 "사과"를 제거하고 제거된 요소를 콘솔창에 띄움.
console.log(fruits); // 오렌지,배
배열의 시작 부분에 하나 이상의 요소를 추가하고, 변경된 배열의 길이를 반환
let fruits = ["오렌지", "배"];
fruits.unshift('사과');
console.log( fruits ); // 사과,오렌지,배
let fruits = ["사과"];
fruits.push("오렌지", "배");
fruits.unshift("파인애플", "레몬");
console.log( fruits );// ["파인애플", "레몬", "사과", "오렌지", "배"]
배열은 특별한 종류의 객체. arr[0]처럼 대괄호를 사용해 접근하는 방식은 객체 문법
다만 배열은 키가 숫자임.
객체 기본 기능 이외에도 순서가 있는 컬렉션을 제어하게 해주는
특별한 메서드 length 프로퍼티도 제공.
let fruits = ["바나나"]
let arr = fruits; // 참조를 복사함(두 변수가 같은 객체를 참조)
//변수fruits 값이 저장되있는 주소를 arr도 참조한다는 이야기.
alert( arr === fruits ); // true
arr.push("배"); // 참조를 이용해 배열을 수정.
alert( fruits ); // 바나나,배.
//arr과 fruits는 같은 곳을 가르키고 있음 . arr을 통해 그 가르키는 곳에 '배'를 집어넣으면
//같은 곳을 참조하고 있는 fruits도 '배'를 집어넣은 그값을 똑같이 봄.
배열을 순회 할때 쓰는 반복문 for, for..of
for..in은 쓸수는 있지만 가능하면 사용 하지말것
let arr = ["사과", "오렌지", "배"];
for (let i = 0; i < arr.length; i++) {
//매개변수 i는 기본값0이고, arr배열의 길이보다 작을때까지 반복함. 반복후 i는 1증가
console.log(arr[i]);//사과,오렌지,배
}
let fruits = ["사과", "오렌지", "자두"];
// 배열 요소를 대상으로 반복 작업을 수행합니다.
for (let fruit of fruits) {
//매개변수 fruit에 배열fruits 요소길이만큼 반복하는데, 각 반복할때마다 값을 fruit에 할당.
console.log(fruit);//사과,오렌지,자두
}
배열 내 요소의 개수. 정확히 표현하면 배열내 가장 큰 인덱스에 1을 더한값.
let fruits = ["사과", "바나나", "체리"];
console.log(fruits.length); // 3을 출력
let fruits = ["사과", "바나나", "체리"];
fruits.length = 2; // 배열의 길이를 2로 설정
console.log(fruits); // ["사과", "바나나"]를 출력
fruits.length = 0; // 배열의 길이를 0로 설정 .배열이 비워짐
console.log(fruits); // [] 빈배열
let fruits = ["사과", "바나나"];
fruits[fruits.length] = "체리"; // "체리"를 배열의 끝에 추가
console.log(fruits); // ["사과", "바나나", "체리"]를 출력
갑자기 생각난 push(). 똑같은 기능을 하지만
사용의 편리성,가독성, 여러요소를 한번에 추가할수 있는능력때문에 push를 쓰는게 더 권장됨.
let fruits = ["사과"];
fruits.length = 3; // 배열 길이를 3으로 설정
console.log(fruits); // ["사과", <2 empty slots>]을 출력
fruits[11] = "배"; //11번째 인덱스에 배를 할당
console.log(fruits.length) //12
일반적으로 좋은 방법이 아니며, 가능한 피하는 것이 좋음. 단 이런경우때문에
'배열내 가장 큰 인덱스에 1을 더한값' 이라는 정의가 내려짐.
배열엔 toString 메서드가 구현되어 있음.
호출하면 배열의 모든 요소가 쉼표로 구분된 하나의 문자열로 변환됨.
console.log( [] + 1 ); // "1"
//빈 배열 []는 toString 메서드에 의해 빈 문자열 ""로 변환되고,
//이후 "" + 1 = "1"
console.log( [1] + 1 ); // "11"
//배열 [1]은 toString 메서드에 의해 "1"로 변환되고,
//이후 "1" + 1 = "11"
console.log( [1,2] + 1 ); // "1,21"
// 배열 [1,2]는 toString 메서드에 의해 "1,2"로 변환되고,
//이후 "1,2" + 1 = "1,21"이 됨.
"+" 연산자를 사용할 때, 만약 한쪽 피연산자가 문자열이라면
다른 피연산자도 문자열로 변환하려고 시도함.
이 과정에서 배열은 자동으로 toString 메서드를 통해 문자열로 변환됨.
배열을 다룰 때, 이러한 형 변환은 예상치 못한 결과를 초래할 수 있으므로 주의