배열과 리스트의 차이?
: 배열은 인덱스가 존재하고(즉, 저장할 공간의 크기가 미리 지정되어 있고) 맨 앞과 중간에 삽입/삭제 작업에 O(n) 시간이 걸리나, 탐색에는 O(1) 시간이 걸린다.
리스트는 인덱스가 없으며, 저장할 공간의 크기가 가변적이다. 맨 앞과 맨 뒤에 삽입/삭제하는 시간은 O(1)이나 중간에 삽입/삭제하거나 탐색하는 작업에 시간 복잡도가 O(n)이 소요된다(인덱스가 없으므로)
'use strict';
// Array
// 1. Declaration
const arr1 = new Array();
const arr2 = [1, 2];
// 2. Index position
const fruits = ['🍧','🧀']
console.log(fruits);
console.log(fruits.length);
console.log(fruits[0]);
console.log(fruits[1]);
console.log(fruits[2]); //undefined
console.log(fruits[fruits.length - 1]); //마지막 인덱스 접근
console.clear();
// 3. Looping over an array
// print all fruits
// a. for
for (let i = 0 ; i < 2; i ++) {
console.log(fruits[i]);
}
// b. for... of
for (const fruit of fruits) {
console.log(fruit);
}
// c. forEach()
fruits.forEach((fruit) => console.log(fruit));
// 4, Addition, deletion, copy
// push: add an item to the end
fruits.push('🍔','🍜');
console.log(fruits);
// pop: remove an item from the end
fruits.pop();
fruits.pop();
console.log(fruits);
// unshift: add an item to the beginning
fruits.unshift('🍖', '🍭');
console.log(fruits);
// shift: remove an item from the beginning
fruits.shift();
console.log(fruits);
//pop, push(O(1))에 비해 shift와 unshift 느리다(O(n)).
//splice: remove an item by index position
fruits.push('🍕', '🍙', '🍡')
console.log(fruits);
fruits.splice(1, 1);
console.log(fruits);
fruits.splice(1, 1, '🍓', '🍟');
console.log(fruits);
// combine two arrays
const fruits2 = ['🥨', '🍍'];
const fruits3 = ['🌻', '🌺'];
const newFruits = fruits.concat(fruits2, fruits3);
console.log(newFruits);
// 5. Searching
// find the index
console.clear();
console.log(fruits);
console.log(fruits.indexOf('🍡')); // 5
console.log(fruits.indexOf('🥨')); // -1(값이 없으면)
// includes
console.log(fruits.includes('🍡')); //true
console.log(fruits.includes('🥨')); // false
// lastIndexOf
console.clear();
fruits.push('🍭');
console.log(fruits);
console.log(fruits.indexOf('🍭')); //0
console.log(fruits.lastIndexOf('🍭')); //6
// Quiz
// 메소드 써보기
// some, every
const even = (element) => element % 2 !== 0;
console.log(fruits.every(even));
console.log(fruits.some(even));
// slice(완전 복사)
const sliceFruits = fruits.slice(1);
console.log(sliceFruits);
// reduce, reduceRight(callback 함수 적용해 accumulation에 current value를 연산하여 return함.)
const numbers = [1, 2, 3, 4]
const initialValue = 0;
const result = numbers.reduce((acc, curr) => acc + curr, initialValue);
console.log(result);
const result3 = fruits.reduce((acc, curr) => acc.concat(curr));
console.log(result3);
const result2 = fruits.reduceRight((acc, curr) => acc.concat(curr));
console.log(result2);
'개발 공부 > 자바스크립트' 카테고리의 다른 글
[엘리의 드림코딩 JS] 10. JSON (0) | 2022.12.05 |
---|---|
[엘리의 드림코딩 JS] 9. 배열 API들 (0) | 2022.12.05 |
[엘리의 드림코딩 JS] 7. Object (0) | 2022.12.04 |
[엘리의 드림코딩 JS] 6. Class vs Object (0) | 2022.12.04 |
[엘리의 드림코딩 JS] 5. 함수(Function) (0) | 2022.12.04 |