TIL - 21.06.25 πŸ‘¨β€πŸ’» - JS Array

μ„±ν›ˆΒ·2021λ…„ 6μ›” 25일
0

TIL

λͺ©λ‘ 보기
12/59
post-thumbnail

TIL - 21.06.25 πŸ‘¨β€πŸ’»

λ°°μ—΄ ( Array )

배열은 μˆœμ„œκ°€ μžˆλŠ” μ»¬λ ‰μ…˜μ„ μ €μž₯ν•˜λŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€.
λ°°μ—΄ μš”μ†Œμ˜ μΈλ±μŠ€λ„ 0λΆ€ν„° μ‹œμž‘ν•œλ‹€.
배열을 ν˜ΈμΆœν•˜λ©΄ μš”μ†Œλ₯Ό ,(콀마)둜 κ΅¬λΆ„ν•œ λ¬Έμžμ—΄μ΄ λ°˜ν™˜λœλ‹€.

λ°°μ—΄μ˜ μš”μ†Œλ‘œλŠ” λ¬Έμžμ—΄, μˆ«μžμ—΄, λΆˆλ¦¬μ–Ένƒ€μž…, ν•¨μˆ˜, 심지어 객체와 배열도 λ“€μ–΄κ°ˆ 수 μžˆλ‹€.

let arr = ['string', 1234, true, function(){ console.log('Dev. planethoon'),
  { name: 'Sunghoon', }, ['1', '2', '3',],
];
console.log(arr[0]); // 'string';
console.log(arr[1]); // 1234;
console.log(arr[2]); // true;
arr[3](); // 'Dev. planethoon'
console.log(arr[4]['name']); // 'Sunghoon'
console.log(arr[5][1]); // '2', 배열을 μš”μ†Œλ‘œ 가지고 μžˆλŠ” 배열을 닀차원배열이라고 ν•œλ‹€.

μ„ μ–Έ

// 빈 λ°°μ—΄ μ„ μ–Έ
let arr = new Array();
let arr = [];

// μš”μ†Œλ„ 같이 μ„ μ–Έ
let arr = new Array('1', '2', '3',);
let arr = ['1', '2', '3',];
let coffee = [`starbucks`, `idiya`, `cafebene`,];
console.log(coffee[0]) // 'starbucks'
coffee[2] = 'blue bottle'; // μ΄λŸ°μ‹μœΌλ‘œ μš”μ†Œλ₯Ό λ³€κ²½ ν•  μˆ˜λ„ 있음.
console.log(coffee[3]) // undefined; 값이 μ—†μœΌλ‹ˆκΉŒ undefined 리턴.
coffee[3] = 'angelinus'; // ν• λ‹Ή μ—°μ‚°μžλ‘œ μš”μ†Œ 좔가도 κ°€λŠ₯
coffee[5] = 'tom&toms'; // 인덱슀 λ›°μ–΄λ„˜μ–΄ 좔가도 κ°€λŠ₯ν•˜λ‹€. 
console.log(coffee); // ['starbucks', 'idiya', 'blue bottle', 'angelinus', empty, 'tom&toms']
// 이 경우 coffee[4]λŠ” empty둜 ν‘œκΈ°λ˜μ§€λ§Œ ν˜ΈμΆœν•˜λ©΄ undefinedκ°€ λ°˜ν™˜λœλ‹€.

arr.length ν”„λ‘œνΌν‹°

  • λ°°μ—΄ μ—­μ‹œ length ν”„λ‘œνΌν‹°λ₯Ό μ‚¬μš©κ°€λŠ₯ν•˜λ©° ν•΄λ‹Ή ν”„λ‘œνΌν‹°λ₯Ό μ΄μš©ν•˜λ©΄ 배열이 가진 μš”μ†Œμ˜ 수λ₯Ό μ•Œ 수 μžˆλ‹€.
let arr = ['1', '2', '3',];
console.log(arr.length) // 3;
arr[4] = '5';
console.log(arr) // ['1', '2', '3', empty, '5']
console.log(arr.length ) // 5; 빈 μš”μ†Œκ°€ μžˆμ–΄λ„ ν•΄λ‹Ή μš”μ†ŒκΉŒμ§€ μΉ΄μš΄νŠΈν•œλ‹€.
  • lengthλŠ” λ°°μ—΄μ˜ μš”μ†Œ 수λ₯Ό λ°˜ν™˜ν•˜λŠ” ν”„λ‘œνΌν‹°μ΄μ§€λ§Œ λ°°μ—΄ 자체의 μš”μ†Œμ— 영ν–₯을 쀄 수 μžˆλ‹€.
let arr = ['1', '2', '3', '4', '5',];
arr.length = 3;
console.log(arr) // ['1', '2', '3',] μš”μ†Œ 3개만 남고 λ‚˜λ¨Έμ§€λŠ” μ‚­μ œλœ 것을 λ³Ό 수 μžˆλ‹€.
arr.length = 5; // lengthλ₯Ό λ‹€μ‹œ 5둜 λŠ˜λ¦¬λ”λΌλ„,
console.log(arr) // ['1', '2', '3', empty x 2] 빈 μš”μ†Œλ§Œ 생길 뿐 μš”μ†ŒλŠ” λ³΅κ΅¬λ˜μ§€ μ•ŠλŠ”λ‹€.

Queueν˜• 자료ꡬ쑰, Stackν˜• μžλ£Œκ΅¬μ‘°μ™€ λ°°μ—΄ λ‚΄μž₯ λ©”μ†Œλ“œ


Queueν˜• 자료ꡬ쑰

배열을 톡해 λ§Œλ“€ 수 μžˆλŠ” λŒ€ν‘œμ  자료ꡬ쑰 쀑 ν•˜λ‚˜λ‘œ μ„ μž…μ„ μΆœμ˜ 자료ꡬ쑰(FIFO - First In First Out)라고도 λΆˆλ¦°λ‹€.

μ΄λŠ” 배열에 push와 shiftλΌλŠ” λ‚΄μž₯ λ©”μ†Œλ“œκ°€ μ‘΄μž¬ν•˜κΈ°μ— κ°€λŠ₯ν•˜λ‹€.

pushλŠ” λ°°μ—΄μ˜ κ°€μž₯ 끝에 μš”μ†Œλ₯Ό μΆ”κ°€ν•˜κ³  μΆ”κ°€ν•˜κ³  λ‚œ λ‹€μŒμ˜ length 값을 λ°˜ν™˜ν•œλ‹€.

ν•œλ²ˆμ— 볡수의 μš”μ†Œλ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.

let arr = ['1', '2', '3', '4', '5',];
arr.push('6', '7'); // 7; 
console.log(arr); // ['1', '2', '3', '4', '5', '6', '7']

shiftλŠ” 제일 μ•ž, 즉 μΈλ±μŠ€κ°€ 0인 μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜κ³  μ œκ±°ν•œ ν›„ λ‹€λ₯Έ μš”μ†Œλ“€μ˜ 인덱슀λ₯Ό ν•˜λ‚˜μ”© μ•žμœΌλ‘œ λ‹ΉκΈ΄λ‹€.

let arr = ['1', '2', '3', '4', '5',];
console.log(arr.shift()) // '1'
console.log(arr) // ['2', '3', '4', '5']

+

unshift도 λ‚΄μž₯ λ©”μ†Œλ“œλ‘œ μ •μ˜λ˜μ–΄ μžˆλŠ”λ°, μ΄λŠ” 제일 μ•žμ— μš”μ†Œλ₯Ό μΆ”κ°€ν•˜κ³  λ‚˜λ¨Έμ§€ μš”μ†Œλ“€μ„ ν•˜λ‚˜μ”© λ’€λ‘œ λ―Όλ‹€.
그리고 μΆ”κ°€ν•˜κ³  λ‚œ λ‹€μŒμ˜ length 값을 λ°˜ν™˜ν•œλ‹€.

ν•œλ²ˆμ— 볡수의 μš”μ†Œλ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.

let arr = ['1', '2', '3', '4', '5',];
arr.unshift('-1', '0'); // 7; ν•œλ²ˆμ— 볡수의 μš”μ†Œλ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.
console.log(arr) // ['0', '1', '2', '3', '4', '5']

Stackν˜• 자료ꡬ쑰

μŠ€νƒν˜• 자료ꡬ쑰 μ—­μ‹œ λ°°μ—΄μ˜ λŒ€ν‘œμ  μžλ£Œκ΅¬μ‘°μ€‘ ν•˜λ‚˜λ‘œ ν›„μž…μ„ μΆœμ˜ 자료ꡬ쑰(LIFO - Last In First Out)λ‘œλ„ λΆˆλ¦°λ‹€.
μŠ€νƒν˜• μžλ£Œκ΅¬μ‘°μ—μ„œ μ‚¬μš©λ˜λŠ” 두가지 λ‚΄μž₯ λ©”μ†Œλ“œλŠ”popκ³Ό νν˜•μ—μ„œλ„ μ‚¬μš©ν•˜λŠ” push 이닀.

pop 은 제일 끝의 μš”μ†Œλ₯Ό μ œκ±°ν•˜κ³  λ°˜ν™˜ν•˜λŠ” λ©”μ†Œλ“œμ΄λ‹€. (shift와 λ°˜λŒ€)

let arr = ['1', '2', '3', '4', '5',];
arr.pop(); // '5'
console.log(arr) // ['1', '2', '3', '4']

정리

μŠ€νƒν˜•μ˜ μžλ£Œκ΅¬μ‘°κ°€ νν˜•μ˜ μžλ£Œκ΅¬μ‘°λ³΄λ‹€ 연산이 λΉ λ₯Έλ° μ΄λŠ” νν˜• μžλ£Œκ΅¬μ‘°μ—μ„œ 데이터λ₯Ό μΆ”μΆœν• λ•Œ μ‚¬μš©ν•˜λŠ” shift λ©”μ†Œλ“œμ˜ μ—°μ‚°κ³Όμ • λ•Œλ¬Έμ΄λ‹€.

shift λ©”μ†Œλ“œλŠ” 0번 μš”μ†Œ 제거 -> λ°°μ—΄ λ‚΄λΆ€μš”μ†Œ 인덱슀 ν•˜λ‚˜μ”© λ‹ΉκΉ€ -> length ν”„λ‘œνΌν‹° κ°±μ‹  의 μˆœμ„œλ‘œ 이루어 지기에 μš”μ†Œμ˜ μˆ˜κ°€ 많으면 λ§Žμ„μˆ˜λ‘ μ—°μ‚° 속도가 λŠλ €μ§„λ‹€.

쑰금 TMIμ§€λ§Œ, μŠ€νƒν˜•κ³Ό νν˜•μ˜ 자료ꡬ쑰처럼 λ°°μ—΄μ˜ μ²˜μŒμ΄λ‚˜ 끝에 μš”μ†Œλ₯Ό λ”ν•˜κ±°λ‚˜ λΉΌλŠ” 연산을 μ œκ³΅ν•˜λŠ” 자료ꡬ쑰λ₯Ό 컴퓨터 κ³Όν•™ 뢄야에선 데큐(deque, Double Ended Queue)라고 λΆ€λ₯Έλ‹€.


λ°°μ—΄κ³Ό 반볡문

λ°°μ—΄μ—μ„œ λ°˜λ³΅λ¬Έμ„ μ‚¬μš©ν•˜λŠ” 방법은 총 세가지, for, for..of 그리고 for..in이 μžˆλ‹€.


for(;;)

for문은 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 배열을 μˆœνšŒν•  λ•Œ μ“°λŠ” κ°€μž₯ ν΄λž˜μ‹ν•œ 방법이닀.

let coffee = ['starbucks', 'idiya', 'blue bottle'];

for(i = 0; i < coffee.length; i++){
  console.log(coffee[i]); // starbucks, idiya, blue bottle
}

for..of

for..ofλŠ” λ°°μ—΄μ˜ μΈλ±μŠ€λŠ” 얻을 수 μ—†κ³  κ°’λ§Œ 얻을 수 μžˆλ‹€.

let coffee = ['starbucks', 'idiya', 'blue bottle'];

for(let coffeeName of coffee){
  console.log(coffeeName); // starbucks, idiya, blue bottle
}

coffeeName의 μžλ¦¬λŠ” for..ofμ•ˆμ—μ„œ μ‚¬μš©ν•  λ³€μˆ˜ 자리이고 coffeeμžλ¦¬λŠ” 배열이 λ“€μ–΄μ˜¬ μžλ¦¬μ΄λ‹€.
λ°°μ—΄μ˜ μš”μ†Œλ₯Ό ν•œλ²ˆμ”© λ°˜ν™˜ν•˜λ©° ꡬ문이 μ§§μ€κ²Œ μž₯점이닀.


for..in

일단 배열도 객체이기에 for..in 도 μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

let coffee = ['starbucks', 'idiya', 'blue bottle'];

for(let key in coffee){
  console.log(coffee[key]); // starbucks, idiya, blue bottle
}

ν•˜μ§€λ§Œ for..in 객체에 μ΅œμ ν™” λ˜μ–΄ μžˆκΈ°μ—
1. 였λ₯˜μ˜ κ°€λŠ₯성이 λ†’κ³ 
2. μ—°μ‚° 속도가 λŠλ¦¬κΈ°μ—
-> for..of μ‚¬μš©μ„ ꢌμž₯ν•œλ‹€.


GOOD πŸ˜‰

배열을 λ§›λ³΄λ©΄μ„œ μ˜€λŠ˜λ„ 지식이 λŠ˜μ—ˆλ‹€.
ν˜‘μ—…ν• λ•Œ κΉƒ μ‚¬μš©ν•˜λŠ” 법을 μ΅ν˜”λ‹€.

BAD πŸ˜₯

배열을 κ³΅λΆ€ν•˜κΈ΄ ν–ˆμ§€λ©΄ 아직 λΆ€μ‘±ν•˜λ‹€.
κΉƒ 곡뢀와 λ°°μ—΄ 곡뢀말고 ν•œκ²Œ μ—†λ‹€.

TO DO πŸ”₯

  • λ°°μ—΄ μΆ”κ°€ 곡뢀
  • 객체 곡뢀
  • Node.js

Retrospect 🧐

μ˜€λŠ˜μ€ 깃을 μ΅νžˆλŠ” μ‹œκ°„μ΄μ—ˆκ³ , 개인 κ³΅λΆ€μ‹œκ°„μ—” 배열을 κ³΅λΆ€ν–ˆλ‹€.
ν˜‘μ—…ν• λ•Œ 깃을 μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”μ§€ μ΅νžˆλŠ” μ‹œκ°„μ„ κ°€μ‘ŒλŠ”λ° ν•„μš”ν•œ μ‹œκ°„μ΄μ—ˆλ‹€κ³  μƒκ°ν•œλ‹€.

그리고 νŽ˜μ–΄λ‹˜μ΄ μ•žμœΌλ‘œ 진행될 μ½”μŠ€μ— λŒ€ν•΄μ„œ 이야기λ₯Ό κ°„λž΅ν•˜κ²Œ μ•Œλ €μ£Όμ…¨λŠ”λ° μ™Έλ©΄ν•˜κ³  있던 λ―Έλž˜κ°€ 눈 μ•žμ— 성큼 λ‹€κ°€μ˜¨ λŠλ‚Œμ΄μ—ˆλ‹€.
이번 μ£ΌλŠ” μ•„λ¬΄λž˜λ„ λ„ˆλ¬΄ λ„λ„ν•΄μ„œ μΊ˜λ¦°λ”λ₯Ό μ™Έλ©΄ν•œ μ±„λ‘œ λ§ˆμŒμ— λ°”λžŒμ΄ 듀어버렀 섀렁섀렁 ν•΄λ²„λ ΈλŠ”λ°,
μƒˆμ‚ΌμŠ€λ ˆ κΉ¨λ‹¬μ•˜μ§€λ§Œ μ•„λ¬΄λž˜λ„ μœ„κΈ°κ°€ λ‹€κ°€μ˜¨ 것 κ°™λ‹€.
λ‹€ν–‰νžˆ 아직 λ°°μš°λŠ” 것도 재밌고, 배운걸 ν¬μŠ€νŒ…ν•˜λ©° μ •λ¦¬ν•˜λŠ” 것에도 μž¬λ―Έκ°€ λ“€μ–΄μ„œ μš”μ¦˜ 기뢄은 μ’‹λ‹€.

ν¬μŠ€νŒ…ν•˜λ‹ˆ 였늘 κΉƒ νŽ˜μ–΄μ‹œκ°„μ— μ‹œκ°„μ΄ 쑰금 남아 νŽ˜μ–΄λ‹˜μ΄λž‘ 이런 μ €λŸ° 이야기λ₯Ό λ‚˜λˆ„λ‹€κ°€ λΈ”λ‘œκ·Έ 이야기가 λ‚˜μ™€μ„œ λ³΄μ—¬λ“œλ ΈλŠ”λ° λ©‹μ§€λ‹€λ©΄μ„œ 쒋은 평가λ₯Ό ν•΄μ£Όμ…¨λ‹€.

사싀 λˆ„κ΅¬ν•œν…Œ λ³΄μ—¬μ£Όλ €λŠ” λͺ©μ λ³΄λ‹¨ λ‚΄κ°€ λ‚˜μ€‘μ— λ³΄λ €λŠ”κ²Œ λͺ©μ μœΌλ‘œ ν¬μŠ€νŒ…ν•˜κ³  μžˆμ§€λ§Œ,
λ³΅μŠ΅ν•˜λŠ” μ‹œκ°„μ΄λΌκ³  μƒκ°ν•˜λ©° λ‚˜λ¦„ μ‹œκ°„μ„ μ œλ²• νˆ¬μžν•΄μ„œ ν¬μŠ€νŒ…ν•˜κ³  μžˆλŠ”λ° 쒋은 평가λ₯Ό ν•΄μ£Όμ‹œλ‹ˆ λ­”κ°€ 보람이 느껴져 μ’‹μ•˜λ‹€.

Reference πŸ™‡

정말 μ• μ •ν•˜λŠ” λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ - https://ko.javascript.info/

profile
μ–΄λ–»κ²Œ 이걸 ν’€μ–΄λ‚Ό 수 μžˆμ„κΉŒ

0개의 λŒ“κΈ€