📒

Array (배열)

Array (배열)

순서가 있는 값을 저장할 수 있는 객체
index : 배열의 순서, 0부터 번호를 매김
element : 배열의 요소, 값을 나타낸다. 배열 요소의 자료형에는 제약이 없음

배열의 선언

대괄호를 이용해 배열을 만들고 각각의 요소는 쉼표로 구분
let arr = [1, 2, 3, 4, 5]; // 주로 사용하는 방법 let arr = new Array(1, 2, 3, 4, 5); // 잘 사용하지 않음
JavaScript
복사

배열의 조회, 변경

값은 인덱스를 이용해 접근
string 타입과 달리 인덱스를 통해 접근하여 요소 수정 가능
console.log(arr[2]) // 3 arr[0] = 8 console.log(arr) // [8, 2, 3, 4, 5]
JavaScript
복사

배열의 메소드

.length

배열의 요소 갯수를 리턴
console.log(arr.length) // 5
JavaScript
복사

.push()

배열 추가
return : 배열 길이
fruits.push('수박')
JavaScript
복사

.pop()

마지막 배열 요소 제거 return : 마지막 배열 요소
fruits.pop()
JavaScript
복사

.shift()

배열의 첫번째 요소를 제거
return : 제거된 배열 요소
JavaScript
복사

.unshift()

배열의 앞에 요소 추가
return : 배열 길이
fruits.unshift('포도')
JavaScript
복사

Array.isArray()

배열인지 확인
param : 확인 할 배열
return type : boolean
let fruits = ['사과', '딸기', '바나나']; console.log(Array.isArray(fruits)); // true
JavaScript
복사

.indexOf()

요소의 인덱스 반환
param : 찾으려는 값
return : 존재하면 인덱스 값, 존재하지 않으면 -1
JavaScript
복사

.includes()

배열 안에 요소가 존재하는지만 확인
인터넷 익스플로러에서 호환되지 않음
param : 찾으려는 값
return : boolean
JavaScript
복사

.slice()

배열을 인덱스를 기준으로 나눔, immutable해서 원래의 배열은 변경하지 않음

.concat()

두 배열을 하나의 배열로 합치는

.join()

배열의 모든 요소를 연결해 하나의 문자열로 만든다.

.splice()

배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경
param : 제거를 시작할 인덱스, 제거할 엘리먼트 갯수, 추가할 엘리먼트
return : 제거한 요소
const months = ['Jan', 'March', 'April', 'June']; months.splice(1, 0, 'Feb'); // inserts at index 1 console.log(months); // expected output: Array ["Jan", "Feb", "March", "April", "June"]
JavaScript
복사

.reverse()

배열의 순서 뒤집기

.fill()

.flat()

모든 하위 배열 요소를 지정한 깊이까지 재귀적으로 이어붙인 새로운 배열

.sort()

배열 정렬 메소드
브라우저마다 다른 알고리즘을 사용 2018기준 v8은 timsort 사용

find

객체로 이루어진 배열이 있을 때 특정 조건에 부합하는 객체를 찾아내는 메소드

.reduce()

배열의 각 요소에 대해 주어진 리듀서 함수를 실행하고 하나의 결과값을 반환한다.
파이썬 lambda랑 비슷한건가?

.filter

.map

Array.from

유사 배열 객체를 배열로 변환
Array.from('happy'); // ['h', 'a', 'p', 'p', 'y']
JavaScript
복사

배열에 프로퍼티?

배열은 특별한 종류의 객체로 key가 숫자
숫자형 key르 사용함으로써 배열은 객체 기본 기능 외에도 순서가 있는 컬렉션을 제어하게 해주는 특별한 메서드를 제공 (ex. length)
배열을 배열답게 만들어주는 것은 특수 내부 표현방식
→ 자바스크립트의 엔진은 배열의 요소를 인접한 메모리 공간에 차례로 저장해 연산 속도를 높임. 외에도 배열 관련 연산을 더 빠르게 해주는 최적화 기법이 다양하게 존재함
개발자가 배열을 순서가 있는 자료의 컬렉션처럼 다루지 않고 일반 객체처럼 다룬다면 이런 기법들은 제대로 동작하지 않아 배열의 이점이 사라짐

배열의 복사

그러나 중첩 구조 복사는 제대로 수행할 수 없다.
const arr = [1, 2, [3, 4]]; const copied = arr.slice(); checker(arr, copied); // true copied[2].push(5); checker(arr, copied); // true ~~~~~~~ // This shouldn't return true anymore
JavaScript
복사
copied 가 복사된 객체라 arr 과 아무런 연관이 없어야하지만 중첩된 구조를 변경하면 원본과 복사본 모두 영향을 받는다. 사실 Array.prototype.slice 는 얕은(shallow) 복사를 수행하기 때문에, 모든 값을 독립적으로 복사할 수 없다.

문자열에서 배열로 타입 변환

str.split('').join('');
JavaScript
복사

배열에서 문자열로 타입 변환

arr.join('');
JavaScript
복사

이중 배열