from()
메서드를 사용하여 유사배열객체를 만듦과 동시에 초기화하는 방법이다.
✨ 예를 들어 1 ~ 8 까지의 숫자가 원소로 들어있는 배열을 만들고 싶다고 가정하자.
let tempArray = Array.from({length : 8}, (value, index) => index + 1)
// [1,2,3,4,5,6,7,8]
원하는 길이를 넘겨주고, 인덱스에 따라 인덱스의 + 1 만큼을 원소로 넣는다.
✨ 만약 모든 원소를 0으로 초기화하고 싶을 때는 아래와 같이 실행하면 된다.
let tempArray = Array.from({length:8}, 0);
//[0,0,0,0,0,0,0,0]
배열의 선언과 초기화를 동시에 할 수 있는 또 다른 방법이다. 특정 길이 만큼의 배열을 선언하고 특정 원소로 초기화 할 수 있는 방법이다.
예를 들면 길이가 9인 배열을 모두 3으로 초기화하려고 한다고 가정하자.
let tempArray = new Array(9).fill(3);
console.log(tempArray);
// [3,3,3,3,3,3,3,3,3]
어떤 배열에 특정 원소가 포함되어 있는지 알고 싶을 때 includes()
메서드를 사용하면 된다. boolean 타입을 반환하며 사용법은 아래와 같다.
let tempArray = [1,2,3,6,7,8];
if(tempArray.includes(3)) {
console.log('includes!!');
}
어떤 배열에서 특정 원소의 인덱스를 반환해주는 메서드이다.
어떤 배열에서 특정 원소가 존재하지 않는다면 -1을 반환해주고 존재한다면 인덱스를 반환해주는 것이 특징이다.
이 특징을 이용하여 포함관계를 알아낼 수 있다.
let tempArray = [1,2,3,4,5,6,7];
// 1이 존재한다면
if(tempArray.indexOf(1) !== -1) {
console.log('includes!!');
}
자바스크립트에서 스택, 큐를 배열로 나타낼 수 있다.
스택은 입구와 출구가 같기 때문에, 먼저 들어간 원소가 나중에 나가는 방식이다.
반면, 큐는 입구와 출구가 분리되어 있어 먼저 들어간 원소가 먼저 나간다.
스택의 개념에 맞게 사용되는 배열 메서드로는 push(), pop()
이 있고,
큐의 개념에서는 push(), shift()
가 있다.
let stack = Array.from({length:8}, (v, i)=>i+1);
stack.push(9); // [1,2,3,4,5,6,7,8,9]
stack.pop(); // [1,2,3,4,5,6,7,8]
let queue = Array.from({length:6}, (v, i)=> i+1);
queue.push(0); // [1,2,3,4,5,6,0]
queue.shift(); // [2,3,4,5,6,0]
큐의 개념에서 shift()
메서드는 위와 같이 맨 앞의 원소를 제거하는 기능을 수행한다.
하지만 이 shift() 메서드의 작동 방식에 대해 얘기해보면, 맨 앞의 원소를 제거한 후, 뒤에 있는 원소들을 한 칸씩 당기며 기능을 수행한다.
따라서 시간복잡도는 O(n)이 걸린다. 이는 배열 또는 큐의 크기가 커질수록 성능이 저하될 수 있다는 얘기다.
결론은, 큐의 개념을 스택으로 해결할 수 있다면 스택으로 해결하는 것이 성능상으로는 더 좋을 수가 있다.
배열을 뒤집어 원소를 역순으로 정렬한다.
let tempArray = [1,2,3,4,5];
tempArray.reverse(); // [5,4,3,2,1]
tempArray.pop(); // [5,4,3,2]
위의 코드처럼 역순으로 정렬한 후 pop()을 하면 큐에서 shift()한 것과 같은 결과를 나타낸다. 그리고 shift()로 인한 성능 저하를 막을 수 있다.