배열이란?
자바스크립트에서 배열(Array)은 이름과 인덱스로 참조되는 정렬된 값의 집합이다. 각각의 값인 요소(element)와 위치를 가리키는 인덱스(index)로 구성되어 있다.
배열의 특징
- 주로 const로 선언한다.
- 배열 이름은 보통 복수형으로 작성한다.
- 객체와는 다르게 index 번호로 구분되기 때문에 순서가 중요하다.
- 같은 배열에 있는 배열 요소끼리의 타입이 다를 수도 있다.
- 배열 요소의 인덱스가 연속적이지 않아도 되고, 따라서 특정 배열 요소가 비어 있을 수도 있다. (undefined)
- 자바스크립트에서 배열은 Array 객체로 다뤄진다.
- 하나의 이름으로 다양한 데이터를 다룰 수 있기 때문에 활용도가 높다.
- 배열의 마지막 인덱스는 배열.length - 1 이다.
const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits[fruits.length - 1];
배열의 생성
자바스크립트에서 배열은 만드는 방식은 크게 3가지가 있다.
- 배열 리터럴을 이용하는 방법
- Array의 객체 생성자를 이용하는 방법
- new 연산자를 이용한 Array 객체 생성 방법
const arr = [배열요소1, 배열요소2,...]; // 배열 리터럴을 이용하는 방법
const arr = Array(배열요소1, 배열요소2,...); // Array 객체의 생성자를 이용하는 방법
const arr = new Array(배열요소1, 배열요소2,...); // new 연산자를 이용한 Array 객체 생성 방법
※ new 연산자를 이용한 방법은 가독성, 실행 속도를 위해 추천하지 않는다.
배열의 참조
인덱스 번호를 참조하여 배열에 접근할 수 있다.
배열이름[인덱스]
const arr = ["JavaScript"]; // 요소가 하나뿐인 배열을 생성함.
const element = arr[0]; // 배열의 첫 번째 요소를 읽어서 대입함.
arr[1] = 10; // 배열의 두 번째 요소에 숫자 10을 대입함. 배열의 길이는 1에서 2로 늘어남.
arr[2] = element; // 배열의 세 번째 요소에 변수 element의 값을 대입함. 배열의 길이는 2에서 3으로 늘어남.
console.log(arr.length); // 배열의 길이는 3
console.log(arr); // 전체 배열 출력
배열 요소 추가
자바스크립트에서 배열에 새로운 배열 요소를 추가하는 방식은 크게 3가지가 있다.
push()
메서드를 이용하는 방법 (배열의 마지막에 추가)- length 프로퍼티를 이용하는 방법 (배열의 마지막에 추가)
- 특정 인덱스를 지정하여 추가하는 방법
arr.push(추가할 요소); // push() 메소드를 이용하는 방법
arr[arr.length] = 추가할 요소; // length 프로퍼티를 이용하는 방법
arr[특정인덱스] = 추가할 요소; // 특정 인덱스를 지정하여 추가하는 방법
Array.prototype 메서드
- 원본 배열을 변경하는 메서드
- 원본 배열은 변경하지 않고 참조만 하는 메서드
- 원본 배열을 반복적으로 참조하는 메서드
1. 원본 배열을 변경하는 메서드
push()
- 배열의 마지막에 요소를 추가하고, 배열의 총길이를 반환 (arr[arr.length] = value와 같음)pop()
- 배열의 마지막 요소를 제거하고, 제거된 요소를 반환shift()
- 배열의 첫 요소를 제거하고, 제거된 요소를 반환 (pop()과 위치가 반대)unshift()
- 배열의 가장 앞 쪽에 요소를 추가하고, 배열의 총길이를 반환reverse()
- 배열의 순서를 전부 반대로 교체sort()
- 배열 요소를 모두 문자열로 보고, 알파벳 순서에 따라 정렬 (숫자나 불리언 타입은 잘못 정렬될 수 있음)
// sort() 메서드로 숫자를 정렬하려면?
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b}); // 역정렬은 b -a
splice()
- 기존 배열 요소를 제거하거나 새로운 배열 요소 추가하여 배열 내용 변경 후 제거된 요소를 배열의 형태로 반환
const arr = [1, true, "JavaScript", "자바스크립트"];
// 인덱스 1의 요소부터 2개의 요소를 제거한 후, false와 "C언어"를 그 자리에 삽입함.
let removedElement = arr.splice(1, 2, false, "C언어");
console.log(arr); // [1,false,C언어,자바스크립트]
console.log(removedElement); // [true,JavaScript]
delete
- 배열 요소를 삭제(배열의 길이는 변하지 않음)
2. 원본 배열은 변경하지 않고 참조만 하는 메서드
join()
- 전달받은 인수를 구분자로 사용하여 배열의 모든 요소를 하나의 문자열로 반환slice()
- 전달받은 시작 인덱스부터 종료 인덱스 바로 앞까지를 새로운 배열로 반환(종료 인덱스가 없으면 끝까지)concat()
- 인수로 전달받은 배열에 기존 배열을 연결하여 새로운 배열을 반환
const arr = [1, true, "JavaScript"];
arr.concat([2, false, "문자열"]); // [1,true,JavaScript,2,false,문자열]
arr.concat([2], [3, 4]); // [1,true,JavaScript,2,3,4] -> 2개 이상의 배열도 한 번에 합칠 수 있음.
arr.concat("다섯", [6, 7]); // [1,true,JavaScript,다섯,6,7] -> 값과 배열도 한 번에 합칠 수 있음.
toString()
- 모든 요소를 쉼표(,)로 구분하여 하나의 문자열로 반환indexOf()
- 전달받은 값과 동일한 배열 요소가 처음으로 등장하는 위치의 인덱스를 반환, 항목을 찾을 수 없으면 -1 반환 (문자의indexOf()
메서드와 비슷)lastIndexOf()
- 전달받은 값과 동일한 배열 요소가 마지막으로 등장하는 위치의 인덱스를 반환
3. 원본 배열을 반복적으로 참조하는 메서드
forEach()
- 해당 배열의 모든 요소에 대하여 반복적으로 명시된 콜백 함수를 실행
const numbers = [45, 4, 9, 16, 25];
let txt = "";
numbers.forEach(myFunction);
// 3개의 arguments를 받음
function myFunction(value, index, array) {
txt += value + "<br>";
}
map()
- 해당 배열의 모든 요소에 대하여 반복적으로 명시된 콜백 함수를 실행한 후, 새로운 배열에 담아 반환
const numbers1 = [45, 4, 9, 16, 25];
const numbers2 = numbers1.map(myFunction);
// 3개의 arguments를 받음
function myFunction(value, index, array) {
return value * 2;
}
filter()
- 해당 배열의 모든 요소에 대하여 반복적으로 명시된 콜백 함수를 실행한 후, 결괏값이 true인 요소들만을 새로운 배열에 담아 반환
const numbers = [45, 4, 9, 16, 25];
const over18 = numbers.filter(myFunction);
// 3개의 arguments를 받음
function myFunction(value, index, array) {
return value > 18;
}
reduce()
- 해당 배열의 모든 요소를 하나의 값으로 줄이기 위해, 두 개의 인수를 전달받는 콜백 함수를 실행- 콜백 함수에 배열의 첫 번째 요소와 두 번째 요소를 인수로 전달하고 실행, 반환된 결괏값과 세 번째 요소를 다시 인수로 전달하고 실행 → 이러한 동작을 반복하고 마지막 결괏값을 반환
- 두 번째로 들어오는 인수는 초기값을 세팅 [init value]
- 기본적으로 왼쪽에서 오른쪽으로 작동하고,
reduceRight()
메서드는 그 반대로 작동
const numbers = [45, 4, 9, 16, 25];
let sum = numbers.reduce(myFunction, [init value]); // 99
function myFunction(total, value, index, array) {
return total + value;
}
every()
- 해당 배열의 모든 요소에 대하여 반복적으로 명시된 콜백 함수를 실행한 후, 그 결괏값이 모두 true일 때에만 true를 반환filter()
메서드와 다른 점은?filter()
메서드는 true인 값을 반환하고every()
메서드는 모든 배열을 순환 후 true of false를 반환
const numbers = [45, 4, 9, 16, 25];
let allOver18 = numbers.every(myFunction); // false
// 모든 배열 값이 18보다 큰 지 확인
function myFunction(value, index, array) {
return value > 18;
}
some()
- 해당 배열의 모든 요소에 대하여 반복적으로 명시된 콜백 함수를 실행한 후, 그 결괏값이 하나라도 true이면 true를 반환
const numbers = [45, 4, 9, 16, 25];
let someOver18 = numbers.some(myFunction); // true
// 일부 배열 값이 18보다 큰 지 확인
function myFunction(value, index, array) {
return value > 18;
}
find()
- 테스트 함수를 통과하는 첫 번째 배열 요소의 값을 반환, 만족하는 값이 없으면 undefined 반환
const numbers = [4, 9, 16, 25, 29];
let first = numbers.find(myFunction); // 25
// 18보다 큰 첫번째 요소 확인
function myFunction(value, index, array) {
return value > 18;
}
findIndex()
- 테스트 함수를 통과하는 첫 번째 배열 요소의 인덱스를 반환, 만족하는 값이 없으면-1 반환indexOf()
메서드와 다른 점은?indexOf()
메서드는 이퀄 연산,findIndex()
는 조건 연산
from()
- 길이 속성이 있거나 반복 가능한 객체에서 Array 객체를 반환(ex. 문자열을 배열로, 맵을 배열로)
const myArr = Array.from("ABCDEFG"); // 문자열을 배열로
entries()
- 배열 요소별로 키(key)와 값(value)의 한 쌍으로 이루어진 새로운 배열 반복자 객체(Array Iterator Object)를 배열 형태로 반환- 이때 키에는 인덱스가 저장되고, 값에는 배열 요소의 값이 저장된다
keys()
- 배열 요소별로 키(key)만 포함하는 새로운 배열 반복자 객체를 배열 형태로 반환values()
- 배열 요소별로 값(value)만 포함하는 새로운 배열 반복자 객체를 배열 형태로 반환includes()
- 해당 배열에 전달받은 값과 동일한 배열 요소의 존재 여부를 true or fasle로 반환indexOf()
메서드와 다른 점은? NaN값을 확인할 수 있다
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.includes("Mango"); // true
※ 참고자료
'🌎 Web > JavaScript' 카테고리의 다른 글
[JavaScript] try / catch로 예외 처리하기 (0) | 2022.04.22 |
---|---|
[JavaScript] 자바스크립트의 새로운 자료구조 Set, Map (0) | 2022.04.17 |
[JavaScript] 자바스크립트의 반복문(while문, for문) (0) | 2022.04.11 |
[JavaScript] 자바스크립트의 조건문(if문, switch문) (0) | 2022.04.11 |
[JavaScript] 자바스크립트 숫자 메서드 총정리 (0) | 2022.04.07 |