일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 주니어 개발자
- 로컬스토리지
- 라우터
- css
- frontend
- 프론트엔드
- 세션
- 장고
- 안드로이드
- Router
- VUE
- 성능 최적화
- 뷰
- vue #vue.js #font #web-font
- cubic-bezier
- lazy loading
- jest
- 렌더링 최적화
- webpack
- NavigationDuplicated
- DOM
- 세션스토리지
- vue.js
- Django
- 자바스크립트 #javascript #렌더링 #렌더링순서
- vue-router
- Transition
- vuetify
- virtual dom
- 예외처리
- Today
- Total
한준호
[Modern javascript] 배열(1) 본문
const arr = [1, 2, 3, 4, 5];
// 인수로 전달받은 값 0을 배열의 인덱스 1부터 3 이전(인덱스 3 미포함)까지 요소로 채운다.
arr.fill(0, 1, 3);
// fill 메서드는 원본 배열을 직접 변경한다.
console.log(arr); // [1, 0, 0, 4, 5]
const arr = [1, 2];
// 원본 배열에서 첫 번째 요소를 제거하고 제거한 요소를 반환한다.
let result = arr.shift();
console.log(result); // 1
// shift 메서드는 원본 배열을 직접 변경한다.
console.log(arr); // [2]
자바스크립트의 배열은 자료구조의 배열과 다른,
-배열의 동작을 흉내낸 해시 테이블로 구현된 객체다.
- 자바스크립트 배열은 인덱스로 배열 요소에 접근하는 경우는 일반적인 배열보다 느리지만 특정 요소를 검색하거나 삽입/삭제 하는 경우에는 빠르다.
- 배열은 메모리 공간에 연속적으로 할당이 되어있어야 한다. 즉 같은 자료형의 데이터만 가지고 있어야 일정한 메모리 주소를 연속적으로 가지는데 자바스크립트의 배열은 어떤 자료형도 들어갈 수 있으므로 배열은 아니다.
const arr = [
'string',
10,
true,
null,
undefined,
NaN,
Infinity,
[ ],
{ },
function () {}
];
- 자바스크립트는 희소 배열을 문법적으로 허용한다. (값의 개수와 배열의 길이가 다를 수 있음)
// 희소 배열
const sparse = [, 2, , 4];
// 희소 배열의 length 프로퍼티 값은 요소의 개수와 일치하지 않는다.
console.log(sparse.length); // 4
console.log(sparse); // [empty, 2, empty, 4]
// 배열 sparse에는 인덱스가 0, 2인 요소가 존재하지 않는다.
console.log(Object.getOwnPropertyDescriptors(sparse));
/*
{
'1': { value: 2, writable: true, enumerable: true, configurable: true },
'3': { value: 4, writable: true, enumerable: true, configurable: true },
length: { value: 4, writable: true, enumerable: false, configurable: false }
}
*/
■ 배열 메소드
◎ Array.prototype.push
- push 메서드는 성능 면에서 좋지 않음.
- push 메서드는 원본 배열을 바꾸는 부수 효과 발생
=> 스프레드 문법을 활용하는 것이 좋음
const arr = [1, 2];
// ES6 스프레드 문법
const newArr = [...arr, 3];
console.log(newArr); // [1, 2, 3]
◎ Array.prototype.unshift
- 인수로 전달받은 모든 값을 배열의 선두에 추가
const arr = [1, 2];
// 인수로 전달받은 모든 값을 원본 배열의 선두에 요소로 추가하고 변경된 length 값을 반환한다.
let result = arr.unshift(3, 4);
console.log(result); // 4
// unshift 메서드는 원본 배열을 직접 변경한다.
console.log(arr); // [3, 4, 1, 2]
- 원본 배열을 바꾸므로 스프레드 문법 활용 권장
const arr = [1, 2];
// ES6 스프레드 문법
const newArr = [3, ...arr];
console.log(newArr); // [3, 1, 2]
◎ Array.prototype.shift
- 원본 배열에서 첫번째 요소를 제거하고 요소를 반환
const arr = [1, 2];
// 원본 배열에서 첫 번째 요소를 제거하고 제거한 요소를 반환한다.
let result = arr.shift();
console.log(result); // 1
// shift 메서드는 원본 배열을 직접 변경한다.
console.log(arr); // [2]
◎ Array.prototype.concat
- 인수로 전달된 값들을 원본 배열에 추가하여 새로운 배열 생성
- concat으로 shift와 push도 구현할 수 있음.
- 마찬가지로 concat대신 스프레드 문법 사용을 권장
const arr1 = [1, 2];
const arr2 = [3, 4];
// 배열 arr2를 원본 배열 arr1의 마지막 요소로 추가한 새로운 배열을 반환한다.
// 인수로 전달한 값이 배열인 경우 배열을 해체하여 새로운 배열의 요소로 추가한다.
let result = arr1.concat(arr2);
console.log(result); // [1, 2, 3, 4]
// 숫자를 원본 배열 arr1의 마지막 요소로 추가한 새로운 배열을 반환한다.
result = arr1.concat(3);
console.log(result); // [1, 2, 3]
// 배열 arr2와 숫자를 원본 배열 arr1의 마지막 요소로 추가한 새로운 배열을 반환한다.
result = arr1.concat(arr2, 5);
console.log(result); // [1, 2, 3, 4, 5]
// 원본 배열은 변경되지 않는다.
console.log(arr1); // [1, 2]
◎ Array.prototype.splice
3개의 매개 변수가 있다.
start - 요소 제거를 시작할 인덱스 -를 붙이면 뒤에서부터
deleteCount - 몇 개를 지울 것인지. 생략 시 start 뒤 모든 요소 제거
items - 제거한 위치에 삽입할 요소들. 생략시 요소만 제거
const arr = [1, 2, 3, 4];
// 원본 배열의 인덱스 1부터 2개의 요소를 제거하고 그 자리에 새로운 요소 20, 30을 삽입한다.
const result = arr.splice(1, 2, 20, 30);
// 제거한 요소가 배열로 반환된다.
console.log(result); // [2, 3]
// splice 메서드는 원본 배열을 직접 변경한다.
console.log(arr); // [1, 20, 30, 4]
- filter 메서드를 사용하여 중복된 모든 특정 요소를 제거할 수 있음
◎ Array.prototype.join
- 배열의 요소를 문자열로 변환한 후 구분자로 연결한 문자열 반환
const arr = [1, 2, 3, 4];
// 기본 구분자는 ','이다.
// 원본 배열 arr의 모든 요소를 문자열로 변환한 후, 기본 구분자 ','로 연결한 문자열을 반환한다.
arr.join(); // -> '1,2,3,4';
// 원본 배열 arr의 모든 요소를 문자열로 변환한 후, 빈문자열로 연결한 문자열을 반환한다.
arr.join(''); // -> '1234'
// 원본 배열 arr의 모든 요소를 문자열로 변환한 후, 구분자 ':'로 연결한 문자열을 반환한다.ㄴ
arr.join(':'); // -> '1:2:3:4'
◎ Array.prototype.reverse
- 원본 배열의 순서를 뒤집는다.
const arr = [1, 2, 3];
const result = arr.reverse();
// reverse 메서드는 원본 배열을 직접 변경한다.
console.log(arr); // [3, 2, 1]
// 반환값은 변경된 배열이다.
console.log(result); // [3, 2, 1]
◎ Array.prototype.fill
- 인수로 전달받은 값을 배열에 채운다
- 첫번째 인수: 채울 값
- 두번째 인수: 시작 인덱스
- 세번째 인수: 끝 인덱스
const arr = [1, 2, 3, 4, 5];
// 인수로 전달받은 값 0을 배열의 인덱스 1부터 3 이전(인덱스 3 미포함)까지 요소로 채운다.
arr.fill(0, 1, 3);
// fill 메서드는 원본 배열을 직접 변경한다.
console.log(arr); // [1, 0, 0, 4, 5]
◎ Array.prototype.includes
- 배열에 특정 요소가 포함되어있는지 Boolean 체크
- 두번째 인덱스로 검색 시작 인덱스 설정
const arr = [1, 2, 3];
// 배열에 요소 1이 포함되어 있는지 인덱스 1부터 확인한다.
arr.includes(1, 1); // -> false
// 배열에 요소 3이 포함되어 있는지 인덱스 2(arr.length - 1)부터 확인한다.
arr.includes(3, -1); // -> true
◎ Array.prototype.flat
- 재귀적으로 배열을 평탄화 한다.
// 중첩 배열을 평탄화하기 위한 깊이 값의 기본값은 1이다.
[1, [2, [3, [4]]]].flat(); // -> [1, 2, [3, [4]]]
[1, [2, [3, [4]]]].flat(1); // -> [1, 2, [3, [4]]]
// 중첩 배열을 평탄화하기 위한 깊이 값을 2로 지정하여 2단계 깊이까지 평탄화한다.
[1, [2, [3, [4]]]].flat(2); // -> [1, 2, 3, [4]]
// 2번 평탄화한 것과 동일하다.
[1, [2, [3, [4]]]].flat().flat(); // -> [1, 2, 3, [4]]
// 중첩 배열을 평탄화하기 위한 깊이 값을 Infinity로 지정하여 중첩 배열 모두를 평탄화한다.
[1, [2, [3, [4]]]].flat(Infinity); // -> [1, 2, 3, 4]
'Frontend > modern javascript' 카테고리의 다른 글
[modern javascript] 브라우저 렌더링 과정 (0) | 2021.09.30 |
---|---|
[Modern javascript] 배열(2) (0) | 2021.09.14 |
[Modern javascript] ES6 함수의 추가 기능 (0) | 2021.09.02 |
[Modern javascript] 클래스(2) (0) | 2021.09.01 |
[Modern javascript] 클래스(1) (0) | 2021.08.31 |