✅배열 조작하기
💭요소추가
요소가 없는 배열을 선언해보겠습니다.let cities = [];
cities라는 변수에 빈 배열을 할당해주었습니다.
그리고 아래와 같이 요소를 하나씩 추가할 수 있습니다.cities[0] = "서울"; // ["서울"] cities[1] = "대전"; // ["서울", "대전"] cities[2] = "대구"; // ["서울", "대전", "대구"]
그리고 6번째 요소에 미리 "제주도"를 할당해볼까요?
cities[5] = "제주도";
let cities = []; cities[0] = "서울"; //결과 "서울" cities[1] = "대전"; //결과 "대전" cities[2] = "대구"; //결과 "대구" cities //결과 (3) ["서울", "대전", "대구"] cities[5] = "제주도"; //결과 "제주도" cities //결과 (6) ["서울", "대전", "대구", empty × 2, "제주도"]
왠지 차례대로 요소를 추가해야할 것 같지만,
이렇게 원하는 위치에 마음대로 요소를 할당할 수 있습니다.
cities의 4,5번째 요소들은 아무것도 할당하지 않았기에undefined
라고 출력됩니다.
이로써 다음과 같이 총 6개의 요소가 있는 배열이 되었습니다.["서울", "대전", "대구", undefined, undefined, "제주도"]
요소를 수정하고 싶을 때는 아래와 같이 배열의 인덱스에 접근하여 값을 할당하면 됩니다.
cities[5] = "포항";
cities[5] = "포항"; //결과 "포항" cities //결과 (6) ["서울", "대전", "대구", empty × 2, "포항"]
💭
push
/unshift
함수
다른 방법으로도 요소를 추가 할 수 있습니다.let cities = []; cities.push("서울", "경기"); cities.unshift("제주"); cities //결과 (3) ["제주", "서울", "경기"]
push()
와unshift()
함수는 요소를 추가해주는 함수입니다.
다만 요소들이 배열에 추가되는 위치가 다릅니다.
push
는array
의 마지막 부분, 즉 꼬리에 요소들을 추가하고,
unshift
는array
의 맨 앞부분, 즉 머리 부분에 요소를 추가합니다.
cities라는 변수에[]
배열을 할당하는 순간, cities라는 변수는Array
형이 되었습니다.
Array
형에는 기본적으로 제공되는 내장 함수들이 많이 있습니다.
그 중에 방금 언급한push
,unshift
가 있는 것입니다.
💭배열 조작 방법
- index로 접근하여 수정이나 추가
let day =["월", "수", "목", "토"]; day[1] = "화"; day[3] = "금"; day[5] = "일"; day //결과 (6) ["월", "화", "목", "금", empty, "일"]
- push, unshift로 추가
let month = ["jan", "feb", "mar", "apr"]; month.push("may"); month //결과 (5) ["jan", "feb", "mar", "apr", "may"]
- pop함수
pop함수를 사용하면 마지막 요소가 제거되고, 마지막 요소의 값을 반환합니다.let cities = ["제주", "서울", "경기"]; cities.pop(); //결과 "경기" cities //결과 (2) ["제주", "서울"]
let cities = ["제주", "서울", "경기"]; let lastCity = cities.pop(); lastCity //결과 "경기"
💭 Assignment
- divideArrayInHalf 함수를 다음과 같이 구현해주세요.
- divideArrayInHalf 함수의 인자인 array는 숫자 값으로만 구성되어 있으며 정확히 총 5개의 요소(element)로 구성되어 있습니다.
- array의 요소들 중 10과 같거나 작은 값의 element들은 result의 맨 앞으로,
- 10보다 큰 값의 요소들은 result의 맨 뒤로 재구성된 배열을 리턴해주세요.
- 중요사항
이때, 순서는 array의 맨 뒤의 요소 부터 맨 앞의 요소까지 순차적으로 이루어저야 합니다.예를 들어, 인자 array 값이 다음과 같을때
[1, 20, 10, 5, 100]
result 배열이 만들어 지는 순서는 다음과 같으며,
[100][5, 100]
[10, 5, 100]
[10, 5, 100, 20]
[1, 10, 5, 100, 20]
아래와 같은 result가 리턴 되어야 합니다.
[1, 10, 5, 100, 20]
function divideArrayInHalf(array) { let result = [] //결과를 넣어 줄 빈 배열 만들기. for (let i = array.length; i >= 0; i--) { //배열의 길이부터 0까지 역순으로 지정. if (array[i] <= 10) { //배열이 10보다 작거나 같다면, result.unshift(array[i]) //배열의 맨 앞에 추가 } else if (array[i] > 10) { //배열이 10보다 크다면, result.push(array[i]); //배열의 맨 뒤에 추가. } } return result; }
배열이 만들어지는 순서가 맨 끝의 요소부터 나오게 하라고 했기 때문에
for (let i = array.length; i >= 0; i--)
배열의 맨 끝자리부터 하나씩 줄어드는 방식으로 지정을 해주는게 키포인트인 것 같다. 그리고 위에서 배운unshift
와push
메소드를 사용하여 맨 앞으로, 또는 맨 뒤로 보내는 것이 이 문제의 포인트 라고 생각한다.