개발 공부/자바스크립트

[엘리의 드림코딩 JS] 8. 배열(Array)

5묘 2022. 12. 4. 20:13

https://youtu.be/yOdAVDuHUKQ

배열과 리스트의 차이?
: 배열은 인덱스가 존재하고(즉, 저장할 공간의 크기가 미리 지정되어 있고) 맨 앞과 중간에 삽입/삭제 작업에 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);