배열 VS 객체
배열은 여러 개의 값을 순차적으로 나열한 자료구조이다.
객체는 어떤 개체에 대한 정보를 클래스로 만들고 그 클래스로 여러 개체들에 대한 정보를 담는 것이다.
예를 들면, 객체는 사람이라는 개체에 대한 정보를 담는 틀을 클래스로 만들어보면, 이름, 키, 몸무게, 등등 다양한 정보를 사람이라는 공통된 개체에 대한 정보를 클래스로 만들어서 여러 객체를 찍어낼 수 있다.
반면에 배열은 단순하게 같은 자료형의 나열이다.
위에서 생성한 사람이라는 객체를 나열할 수도 있고, 정수를 나열할 수도 있다. 하나의 배열에는 동일한 자료형을 나열해서 사용하자!!
const arr = [1, 2, 3];
const arr = [1, , 3];
const arr = new Array(10);
console.log(arr); // -> [empty * 10]
new Array(); // -> []
new Array(1, 2, 3); // -> [1, 2, 3]
const arr = [1, 2];
console.log(arr[0]); //-> 1
console.log(arr[2]); //-> undefined
const arr = [0];
arr[1] = 1;
console.log(arr); //-> [0, 1]
console.log(arr.length); //-> 2
const[100] = 100;
console.log(arr); //-> [0, 1, empty * 98, 100]
console.log(arr.length); //-> 101
const arr = [1, 2, 3];
delete arr[1];
console.log(arr); //-> [1, empty, 3]
//length 프로퍼티에 영향을 주지 않음, 즉 희소 배열이 됨
console.log(arr.length); //-> 3
const arr = [1, 2, 3];
// Array.prototype.splice(삭제를 시작한 인덱스, 삭제할 요소 수)
// arr[1]부터 1개의 요소를 제거
arr.splice(1, 1);
console.log(arr); //-> [1, 3]
// length 프로퍼티가 자동 갱신됨
console.log(arr.length); //-> 2
원본배열을 가공하는 메서드
push() - 배열의 마지막에 하나 이상의 요소를 추가한 뒤 수정된 배열의 길이를 반환
pop() - 배열의 마지막 요소를 반환하고, 원본 배열에서 그 요소를 삭제
let array = ["M", "o", "n", "g"];
console.log(array.push('u')); //-> 5 배열의길이 반환
console.log(array); //-> ["M", "o", "n", "g", "u"]
console.log(array.pop()); //-> u
console.log(array); //-> ["M", "o", "n", "g"]
shift() - 배열의 첫 번째 요소를 제거하고 모든 요소를 왼쪽으로 이동시키고, 제거된 요소를 반환
unshift() - 배열에 하나 이상의 요소를 맨 왼쪽에 추가하고, 기존의 요소를 오른쪽으로 이동, 수정된 배열의 길이 반환
let array = ["M", "o", "n", "g"];
console.log(array.shift()); //-> M
console.log(array); //-> ["o", "n", "g"]
console.log(array.unshift('m')); //-> 4
console.log(array); //-> ["m", "o", "n", "g"]
let array = ["M", "o", "n", "g"];
console.log(array.splice(1, 2, 'a', 'b', 'c')); //-> ["o", "n"]
console.log(array); //-> ["M", 'a', 'b', 'c', 'g']
console.log(array.splice(3)); //-> ['c', 'g']
console.log(array); //-> ["M", 'a', 'b']
let array = ["M", "o", "n", "g"];
console.log(array.sort()); //-> ["M", "g", "n", "o"]
새로운 배열 또는 값을 생성하여 반환하는 메서드들
join() - 모든 요소 값을 문자열로 변환하고, 인자로 받은 문자로 연결하여 반환. 인자를 입력하지 않으면 쉼표(,)로 연결
let array = ["M", "o", "n", "g"];
console.log(array.join('-')); //-> M-o-n-g
console.log(array.join()); //-> M,o,n,g
let array1 = ["M", "o"];
let array2 = ["n", "g"];
let result = array1.concat(array2);
console.log(result); //-> ["M", "o", "n", "g"]
let array = ["M", "o", "n", "g"];
console.log(array.slice(2,4)); //-> ["n", "g"]
console.log(array); //-> ["M", "o", "n", "g"]
lastIndexOf() - 맨 뒤의 요소부터 앞으로 검색.
요소들을 순회하는 메서드들
요소들을 순회하는 메서드들은 for(let i=0; i<a.size; i++)와 동일한 효과를 내지만, 기능이 약간씩 다름. 대부분 세개의 인자를 받는 함수를 매개 변수로 사용하며, 세 개의 인자는 아래와 같음.
value : 현재 처리할 요소의 값
index : 현재 처리 중인 요소의 인덱스 값
array : 현재 처리 중인 배열
forEach() - 각 요소마다 한 번씩 매개변수로 전달된 함수를 실행
let a = [1, 2, 3, 4, 5];
let sum = 0;
a.forEach((value) => { sum += value;})
console.log(sum); //-> 15
a.forEach((value, index, array) => { array[index] = value+1; });
console.log(a); //-> [2, 3, 4, 5, 6]
let a = [1, 2, 3, 4, 5];
let array1 = a.map((value) => { return value*2 });
console.log(array1); //-> [2, 4, 6, 8, 10]
let array2 = a.map((value, index, array) { return array[index] * 2});
console.log(array2); //-> [2, 4, 6, 8, 10]
let a = [1, 2, 3, 4, 5];
console.log(a.reduce((acc, cur) => { return acc + cur })); //-> 15
console.log(a.reduce((acc, cur) => { return acc + cur }, 10)); //-> 25
음... 이 예제를 봐도 잘 모르겠다... 로직을 글로 써보면 아래와 같이 나옴.