웹개발 복습 정리 13 : 배열

Kimhojin_Zeno·2023년 1월 1일
0

웹개발 복습 정리

목록 보기
13/30

배열

Arrays

배열

데이터 구조.

데이터 구조란 데이터의 집합을 뜻한다.

배열은

  1. 값들의 집합
  2. 순서가 있다.

순서가 있는 값들의 집합이다.

배열은 대괄호를 이용해서 만든다.

let arr = []; // 빈 배열
let arr2 = ['red', 1, 3, 'orange']; // 문자열, 숫자, 원시값 다 가능.

배열에 들어있는 값은 인덱스를 통해 접근한다. 인덱스는 앞에서부터 0부터 시작한다.

arr[1] // 배열에서 두번째로 오는 값을 나타냄.
arr[1] = 2; // 인덱스를 이용해 그 값만 바꿀 수 있다.

만약 배열에 4번 인덱스까지만 값이 들어있는데, 10번 인덱스에 값을 주면 그 사이는 undefined로 채워진다.

const로 배열을 만들어도 고정된 것은 그 배열이 위치하는 참조값이기 때문에 배열의 요소를 바꾸어도 아무 문제가 없다.

push, pop, shift, unshift

push

push는 배열의 마지막에 값을 넣어준다.

let arr = [1, 2, 3];
arr.push(44);

arr
-> [1, 2, 3, 44]

pop

pop은 배열의 마지막 값을 빼준다.

let arr = [1, 2, 3, 4];
arr.pop(); // 빈 괄호를 써줘야함.
-> 4  //이렇게 뺀 값이 나온다.

arr
-> [1, 2, 3] // 배열에는 빠진다.

shift

shift는 배열의 첫번째 값을 빼준다.

let arr = [1, 2, 3, 4];
arr.shift(); // 빈 괄호를 써준다.
-> 1 // 뺀 값이 나온다.

arr
-> [2, 3, 4] // 배열에서는 빠진다.

unshift

unshift는 배열의 첫자리에 값을 넣어준다. 새치기.

let arr = ['1', '2', '3'];
arr.unshift('하나'); // 괄호 안에 넣을 값을 적는다.
-> 4 // 배열의 길이를 리턴함.

arr
-> ['하나', '1', '2', '3'] // 맨 앞에 새치기한다.

Array Methods

concat

concat(접합)은 배열을 합쳐준다.

let colors = ['red', 'yellow']
let animals = ['dog', 'cat']

let newArr = colors.concat(animals);

newArr
-> ['dog', 'cat', 'red', 'yellow']

배열1.concat(배열2) 이런식으로 쓴다.

앞에서부터 차례대로 합쳐짐. 비파괴 메서드라서 기존 배열1과 배열2는 변하지 않는다. 새로운 배열이 생기는 것임.

includes

배열에 특정 값이 포함되어 있는지 알려준다.

포함되어 있으면 true를 반환, 아니면 false.

colors.includes('red');
-> true // 들어있다는 뜻.

indexOf

특정 값의 인덱스를 알려줌.

let arr = ['a', 'b', 'c']

arr.indexOf('a')
-> 0 // 인덱스는 0이다.

arr.indexOf('d')
-> -1 // 인수로 넣은 값이 배열에 없으면 -1을 반환한다.

reverse

배열의 순서를 뒤집어준다.

let arr = [1, 2, 3, 4]
arr.reverse(); // 빈 괄호를 써줘야됨.

arr
-> [4, 3, 2, 1] // 원본이 바뀐다.

파괴 메서드. 원본 자체가 바뀐다.

slice

배열의 일부를 복사한다.

arr.slice(시작인덱스)

let colors = ['red', 'orange', 'yellow', 'green', 'blue']

arr.slice(1)
-> ['orange', 'yellow', 'green', 'blue'] // 1번 인덱스부터 끝까지 복사한다.
//원본 colors는 변하지 않음.

arr.slice(시작인덱스, 정지인덱스)

let colors = ['red', 'orange', 'yellow', 'green', 'blue']

arr.slice(1,3)
-> ['orange', 'yellow'] // 1번 인덱스부터 3번 인덱스 앞까지 복사한다.
//정지인덱스인 3번 인덱스는 포함하지 않는다. 그 앞까지 포함.

splice

기존 요소들을 제거하거나 대체하거나 새로운 요소들을 추가해서 배열의 내용을 변경한다. 파괴메서드. 원본을 변경한다.

arr.splice(시작인덱스, 삭제할인덱스, 추가할내용)

let months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb'); // 1번째 인덱스에, 삭제하지 않고, 'Feb'을 끼워넣음.

months
-> ['Jan', 'Feb', 'March', 'April', 'June']

months.splice(4, 1, 'May'); // 4번째 인덱스에 1개를 삭제하고 그 자리에 'May'를 넣는다.

months
-> ['Jan', 'Feb', 'March', 'April', 'May']

추가할내용을 없이 빼기만 해도 된다. 뺀 내용을 반환한다.

sort

배열을 줄이는 메서드.

배열의 순서를 1234.. abcd..순서대로 정렬한다.

괄호 안에 함수를 넣어서 여러 방식으로도 가능하다.

const arr = [1, 30, 4, 21, 10000]
arr.sort();

arr
-> [1, 10000, 21, 30, 4]

괄호안에 아무것도 안 넣으면 모두 문자열로 변환해서 유니코드 값을 비교해서 정렬한다.

오름차순으로 정렬하기

arr.sort((a, b) => a - b)  // 오름차순
arr.sort((a, b) => b - a)  // 내림차순

toString

배열을 문자열로 바꾼다.

const arr = [1, 2, 'a', 'b']
arr.toString();

-> "1,2,a,b"

reduce, filter, map등은 나중에

참조 타입, 동일성 테스트

[1, 2] === [1, 2]
-> false

비교되는 것은 배열 안에 있는 값이 아니다.

실제로 비교되는 건 메모리에서 참조되는 값이다.

배열이 위치한 주소.

let nums = [1, 2, 3]
let numsCopy = nums

nums
-> [1, 2, 3]
numsCopy
-> [1, 2, 3]

nums.push(4);

nums
-> [1, 2, 3, 4]
numsCopy
-> [1, 2, 3, 4]

//메모리에서 같은 것을 참조하고 있는 것이다.
//numsCopy에는 새 배열이 아니라 nums의 참조값, 즉 주소가 배정된 것뿐.

nums === numsCopy
-> true //그래서 삼중등호연산자로 비교해도 같다.

Nested Arrays

다차원 배열

배열의 요소로 배열이 들어갈 수 있다.

profile
Developer

0개의 댓글