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

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

TIL

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

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

λ°°μ—΄ vs 객체

각 값이 λ³€μˆ˜λ‘œ μž‘ν˜€μžˆμ§€λ§Œ 객체의 κ²½μš°μ—λŠ” 각 μΈλ±μŠ€κ°€ 무슨 값을 가지고 μžˆλŠ”μ§€ μ•Œκ³  μžˆμ–΄μ•Ό ν•œλ‹€.
μ•Œκ³  μžˆλ”λΌλ„ μš”μ†Œλ₯Ό 인덱슀둜 ν˜ΈμΆœν•˜κΈ°μ— 가독성이 맀우 떨어진닀.

λ°°μ—΄ μ£Όμ˜ν•  점

  • let arr = []; μΌλ•Œ arr === []λŠ” false이닀.
    같은 빈 배열이 μ•„λ‹Œ λ‹€λ₯Έ μœ„μΉ˜μ— μžˆλŠ” 빈 λ°°μ—΄λ‘œ μΈμ‹ν•˜κΈ°μ— 배열이 빈 λ°°μ—΄μž„μ„ 확인해야할땐 arr.length === 0 으둜 ν™•μΈν•˜μž.

객체 μ£Όμ˜ν•  점

  • branket notation κ³Ό dot notation
    두 ν‘œκΈ°λ²•μ— λŒ€ν•œ 것은 이전 ν¬μŠ€νŠΈμ— μž μ‹œ 언급을 ν–ˆμ—ˆλŠ”λ° μ—¬μ „νžˆ λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•μ„ ꢌμž₯ν•œλ‹€.
    점 ν‘œκΈ°λ²•μœΌλ‘œ μ‚¬μš©ν•  κ²½μš°μ— ν•¨μˆ˜ μ΄μš©μ‹œ μ œλŒ€λ‘œ 호좜이 λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.
    λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•  λ•ŒλŠ” λ”°μ˜΄ν‘œλ₯Ό 잘 μ‚¬μš©ν•΄μ•Όν•˜λŠ”λ°, λ³€μˆ˜λ‘œ μ‚¬μš©ν•˜μ§€ μ•Šκ³  객체의 ν”„λ‘œνΌν‹° 값을 뢈러올 κ²½μš°μ—λŠ” λ”°μ˜΄ν‘œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ§€λ§Œ, ν”„λ‘œνΌν‹° ν‚€ 값이 동적(λ³€μˆ˜)일땐 λ”°μ˜΄ν‘œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

in μ—°μ‚°μž

ν”„λ‘œνΌν‹° ν‚€ 값을 λ¬Έμžμ—΄λ‘œ μ λŠ” κ²ƒμœΌλ‘œ ν”„λ‘œνΌν‹° μ‘΄μž¬μ—¬λΆ€λ₯Ό λΆˆλ¦¬μ–Έ νƒ€μž…μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.

const obj = {
  name: 'sunghoon',
  job: 'dev',
}

'name' in obj; // true
'age' in obj; // false

λ°°μ—΄ λ©”μ†Œλ“œ


arr.indexOf()

indexOf λ©”μ†Œλ“œλŠ” λ°°μ—΄ λ‚΄ 인자λ₯Ό μ°ΎλŠ” λ©”μ†Œλ“œμ΄λ‹€.
문법은 λ‹€μŒκ³Ό κ°™λ‹€.
arr.indexOf(element, startIndex)
arr 배열에 elementκ°€ μš”μ†Œλ‘œ μžˆλŠ”μ§€ μ°Ύκ³  졜초둜 찾은 μš”μ†Œμ˜ μœ„μΉ˜λ₯Ό λ°˜ν™˜ν•œλ‹€.
즉, 같은 μš”μ†Œκ°€ μ—¬λŸ¬κ°œ μžˆλ‹€λ©΄ κ°€μž₯ λ¨Όμ € 찾은 μš”μ†Œμ˜ μœ„μΉ˜λ₯Ό λ°˜ν™˜ν•˜κ³  λ©”μ†Œλ“œλŠ” μž‘λ™μ„ λ©ˆμΆ˜λ‹€.
startIndex μΈμžλŠ” μƒλž΅ν•΄λ„ λ˜μ§€λ§Œ μ‚¬μš©ν•œλ‹€λ©΄ ν•΄λ‹Ή μœ„μΉ˜λΆ€ν„° 탐색을 μ‹œμž‘ν•œλ‹€.
λ§Œμ•½ λ°°μ—΄ λ‚΄ element μš”μ†Œκ°€ μ—†λ‹€λ©΄ -1을 λ°˜ν™˜ν•˜λ©° 이λ₯Ό μ‘μš©ν•΄ ν•¨μˆ˜ λ‚΄ μš”μ†Œ 쑴재 μ—¬λΆ€λ₯Ό λΆˆλ¦¬μ–Έ νƒ€μž…μœΌλ‘œ λ°˜ν™˜ μ‹œν‚¬ 수 μžˆλ‹€.

const arr = [1, 2, 3, 4, 5,];
arr.indexOf(4) // 3; μš”μ†Œκ°€ μ‘΄μž¬ν•œλ‹€λ©΄ ν•΄λ‹Ή 인덱슀λ₯Ό λ°˜ν™˜.
arr.indexOf(6) // -1; 쑴재 ν•˜μ§€μ•ŠλŠ”λ‹€λ©΄ -1을 λ°˜ν™˜.
arr.indexOf(3) !== -1 // true; 이와 같이 내뢀에 μš”μ†Œ μ‘΄μž¬μ—¬λΆ€λ₯Ό λΆˆλ¦¬μ–Έ νƒ€μž…μœΌλ‘œ λ°˜ν™˜ κ°€λŠ₯.
arr.indexOf(2, 2) // -1; startIndex 둜 탐색 μ‹œμž‘μœ„μΉ˜λ₯Ό μ‘°μ • ν•  수 μžˆλ‹€.

arr.indexOf()와 λΉ„μŠ·ν•œ λ©”μ†Œλ“œλ‘œ arr.lastIndexOf()κ°€ μžˆλŠ”λ° λ©”μ†Œλ“œ μ΄λ¦„μ—μ„œ μœ μΆ”ν•  수 μžˆλ“―, λ°°μ—΄μ˜ λ’€μ—μ„œ λΆ€ν„° μ—­λ°©ν–₯으둜 탐색을 μ‹œμž‘ν•˜κ³  μš”μ†Œλ₯Ό 찾으면 ν•΄λ‹Ή μœ„μΉ˜μ˜ 인덱슀λ₯Ό λ°˜ν™˜ν•œλ‹€.


arr.includes()

includes λ©”μ†Œλ“œλŠ” λ°°μ—΄ λ‚΄ 인자의 쑴재 μ—¬λΆ€λ₯Ό λΆˆλ¦¬μ–Έ νƒ€μž…μœΌλ‘œ λ°˜ν™˜ν•˜λŠ” λ©”μ†Œλ“œμ΄λ‹€.
눈치챈 μ‚¬λžŒμ΄ μžˆλ“―, arr.indexOf(element) !== -1 κ³Ό ꡉμž₯히 μœ μ‚¬ν•œ μž‘λ™μ„ ν•˜κ²Œ λ˜λŠ”λ° λͺ‡κ°€μ§€ 차이가 μžˆλ‹€.

  1. NaN(Not a Number)λ₯Ό νŒλ³„ ν•  수 μžˆλ‹€.
    indexOf λ©”μ†Œλ“œλŠ” 일치 μ—°μ‚°μž(===)λ₯Ό κΈ°μ€€μœΌλ‘œ μš”μ†Œλ₯Ό 찾아내기에 NaN을 골라낼 수 μ—†λŠ” 반면, includesλŠ” μ°Ύμ•„λ‚Ό 수 μžˆλ‹€.
  2. IE ν˜Έν™˜μ΄ μ•ˆλœλ‹€.

이와 같은 μž₯단이 μžˆμœΌλ‹ˆ μœ μ˜ν•΄μ„œ μ‚¬μš©ν•΄μ•Όν•œλ‹€.


arr.find()와 arr.findIndex()

find λ©”μ†Œλ“œλŠ” 주어진 ν•¨μˆ˜μ—μ„œ true 값을 λ°˜ν™˜ν•˜λŠ” 첫 번재 μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜λŠ” λ©”μ†Œλ“œμ΄λ‹€.
λ§Œμ•½ μ°ΎλŠ” μš”μ†Œκ°€ μ—†λ‹€λ©΄ undefinedλ₯Ό λ°˜ν™˜ν•œλ‹€.
find λ©”μ†Œλ“œ 같은 κ²½μš°λŠ” 객체λ₯Ό μš”μ†Œλ‘œ 가진 λ°°μ—΄μ—μ„œ μ“°κΈ°κ°€ μ’‹λ‹€.

const arr = [
  {name: 'sunghoon', job: 'dev',},
  {name: 'sungsu', job: 'dev',},
]

let findDev = arr.find(item => item.job === 'dev') // item 은 λ§€κ°œλ³€μˆ˜ μžλ¦¬λ‹€.
// ν”„λ‘œνΌν‹° ν‚€κ°€ job인 κ²ƒμ˜ ν”„λ‘œνΌν‹° 값이 'dev'μΌλ•Œ ( true λ₯Ό λ°˜ν™˜ν• λ•Œ ) κ·Έ 객체λ₯Ό λ°˜ν™˜ν•œλ‹€.

console.log(findDev) // {name: 'sunghoon', job: 'dev',}; 처음 찾은 객체가 λ°˜ν™˜λ˜μ—ˆλ‹€.

let findDev = arr.find(function(item) { return item.job === 'dev' })
// 이 μ½”λ“œμ™€ μƒμˆ ν•œ ν™”μ‚΄ν‘œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œ μ½”λ“œλŠ” μ™„μ „ λ™μΌν•˜λ©° 이해λ₯Ό 돕기 μœ„ν•΄ μž‘μ„±ν–ˆλ‹€.

findIndex()도 같은 역할을 ν•˜μ§€λ§Œ μš”μ†Œ 자체λ₯Ό λ°˜ν™˜ν•˜λŠ” 것이 μ•„λ‹Œ 찾은 μš”μ†Œμ˜ indexλ₯Ό λ°˜ν™˜ν•˜κ³  μš”μ†Œλ₯Ό 찾지 λͺ»ν•˜λ©΄ -1을 λ°˜ν™˜ν•œλ‹€.


arr.filter()

filter λ©”μ†Œλ“œλŠ” find λ©”μ†Œλ“œμ™€ μœ μ‚¬ν•˜μ§€λ§Œ filter λ©”μ†Œλ“œ 같은 κ²½μš°λŠ” ν•΄λ‹Ήν•˜λŠ” μš”μ†Œ 전체λ₯Ό λ‹΄λŠ” 배열을 λ°˜ν™˜ν•œλ‹€.

const arr = [
  {name: 'sunghoon', job: 'dev',},
  {name: 'sungsu', job: 'dev',},
]

let findDev = arr.filter(item => item.job === 'dev')
console.log(findDev) 
// [ {name: 'sunghoon', job: 'dev',}, {name: 'sungsu', job: 'dev',} ]

arr.map()

map λ©”μ†Œλ“œλŠ” λ°°μ—΄μ˜ μš”μ†Œ 전체λ₯Ό ν˜ΈμΆœν•˜κ³  ν•¨μˆ˜ 호좜 값을 λ°°μ—΄λ‘œ λ°˜ν™˜ν•΄μ£ΌλŠ” λ©”μ†Œλ“œμ΄λ©° μ‚¬μš©ν•˜κΈ°μ— 따라 ν¬ν…μ…œμ΄ 맀우 큰 λ©”μ†Œλ“œ 쀑 ν•˜λ‚˜μ΄λ‹€.

const arr = [1, 2, 3];
let double = arr.map(item => item * 2);

console.log(double); // [2, 4, 6]

arr.sort()

sort λ©”μ†Œλ“œλŠ” λ¬Έμžμ—΄μ„ μž¬μ •λ ¬ μ‹œν‚€λŠ” λ©”μ†Œλ“œμ΄λ©°, μž¬μ •λ ¬ μ‹œν‚¬λ•Œ λ°°μ—΄ 자체λ₯Ό λ³€ν˜•μ‹œν‚¨λ‹€.
μž¬μ •λ ¬μ˜ κΈ°λ³Έ 기쀀은 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 기본값인 μ‚¬μ „νŽΈμ§‘ 순으둜 μ •λ ¬μ‹œν‚€λ©°, μ •λ ¬μ‹œν‚€λŠ” ν•¨μˆ˜λ₯Ό 인자둜 넣을 수 μžˆλ‹€.

const arr = [ 25, 1732, 21672, 3,];

arr.sort() // [1732, 21672, 25, 3]; λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ μž¬μ •λ ¬λœ 값을 λ°˜ν™˜ν•œλ‹€.
console.log(arr) // [1732, 21672, 25, 3]; μ‚¬μ „νŽΈμ§‘ 순으둜 μ •λ ¬λ˜μ—ˆλ‹€.
  • μ‚¬μ „νŽΈμ§‘(lexciographical) μˆœμ΄λž€,
    말 κ·ΈλŒ€λ‘œ 사전에 μ •λ¦¬ν–ˆμ„λ•Œ 뒀에 있으면 더 크닀고 λΉ„κ΅ν•˜λŠ” 방법이닀.
    μ‚¬μ „νŽΈμ§‘ μˆœμ—μ„  2 > 1999 의 경우, 2κ°€ 1999의 κ°€μž₯ 첫 κΈ€μžμΈ 1보닀 ν¬λ―€λ‘œ 2κ°€ 더 크닀.

arr.reverse()

reverse λ©”μ†Œλ“œλŠ” μš”μ†Œλ₯Ό μ—­μˆœμœΌλ‘œ μ •λ ¬ μ‹œμΌœμ£ΌλŠ” λ©”μ†Œλ“œμ΄λ‹€.
원배열 자체λ₯Ό λ³€ν˜•μ‹œν‚€λ©° λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν• λ•Œ μ—­μˆœμœΌλ‘œ μ •λ ¬λœ 배열을 λ°˜ν™˜ν•œλ‹€.

const arr = [1, 2, 3, 4,];
arr.reverse() // [4, 3, 2, 1]; λ©”μ†Œλ“œλ₯Ό ν‰κ°€ν• λ•Œ λ°°μ—΄μ˜ μ—­μˆœμ„ λ°˜ν™˜ν•œλ‹€.

console.log(arr) // [4, 3, 2, 1]

str.split()

split λ©”μ†Œλ“œλŠ” λ¬Έμžμ—΄μ„ κ΅¬λΆ„μž(delimiter)λ₯Ό κΈ°μ€€μœΌλ‘œ μ–‘ μ˜†μœΌλ‘œ λ‚˜λˆ„κ³  λ‚˜λˆˆ μš”μ†Œλ“€λ‘œ 이루어진 배열을 λ§Œλ“œλŠ” λ©”μ†Œλ“œμ΄λ©° 문법은 λ‹€μŒκ³Ό κ°™λ‹€.

str.split(delimiter, length)

κ΅¬λΆ„μžκ°€ λ¬Έμžμ—΄ 속에 μ—†μœΌλ©΄ λ¬Έμžμ—΄ 전체λ₯Ό ν•˜λ‚˜μ˜ μš”μ†Œλ‘œ 가진 배열이 λ°˜ν™˜λ˜λ©°, κ΅¬λΆ„μžκ°€ 빈 λ¬Έμžμ—΄μ΄λΌλ©΄ λ¬Έμžμ—΄μ˜ 문자 ν•˜λ‚˜ ν•˜λ‚˜λ₯Ό μš”μ†Œλ‘œ 가진 배열이 λ°˜ν™˜λœλ‹€.

인자 쀑 lengthλŠ” μƒλž΅ν•΄λ„ λ˜λ‚˜ κΈ°μž…ν•˜λ©΄ μš”μ†Œ 수λ₯Ό μ œν•œ ν•  수 μžˆλ‹€.

const str = 'Sunghoon wanna be a developer'

str.split(' '); // 곡백 ν•œκΈ€μž
// ['Sunghoon', 'wanna', 'be', 'a', 'developer']

str.split('1');
// ['Sunghoon wanna be a developer']
            
str.split(''); // 빈 λ¬Έμžμ—΄
// ["S", "u", "n", "g", "h", "o", "o", "n", " ", "w", "a", "n", "n", "a", " ", "b", "e", " ", "a", " ", "d", "e", "v", "e", "l", "o", "p", "e", "r"]

arr.join()

join λ©”μ†Œλ“œλŠ” splitκ³Ό λ°˜λŒ€λ˜λŠ” κ°œλ…μ˜ λ©”μ†Œλ“œλ‘œ λ°°μ—΄μ˜ μš”μ†Œλ₯Ό 인자의 μ–‘ μ˜†μ— κ»΄μ„œ μ „λΆ€ ν•©μΉœ ν›„ ν•œ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•˜λŠ” λ©”μ†Œλ“œμ΄λ‹€.

const arr = ['Sunghoon', 'wanna', 'be', 'a', 'developer'];

arr.join('-') // 'Sunghoon-wanna-be-a-developer'

Array.isArray()

Array.isArray() λ©”μ†Œλ“œλŠ” typeof μ—°μ‚°μžκ°€ λ°°μ—΄κ³Ό 객체λ₯Ό ꡬ뢄을 λͺ»ν•˜κΈ°μ— 배열을 κ΅¬λΆ„ν• λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ†Œλ“œμ΄λ©° λΆˆλ¦¬μ–Ένƒ€μž…μœΌλ‘œ λ°˜ν™˜ν•œλ‹€.

typeof {1:2} // object; 
typeof [1,2] // object; 배열인데 객체둜 λ°˜ν™˜ν•œλ‹€.

Array.isArray({1:2}) // false;
Array.isArray([1,2]) // true;

GOOD πŸ˜‰

λ°°μ—΄ 곡뢀에 μ‹œκ°„μ„ μ œλ²• νˆ¬μžν–ˆλ‹€.
νˆ¬μžν•œ λŒ“κ°€λ‘œ μ œλ²• 많이 μΉœν•΄μ§„ λ“― ν•˜λ‹€.

BAD πŸ˜₯

λ°°μ—΄ κ³΅λΆ€ν•œλ‹€κ³  객체 곡뢀λ₯Ό λœν–ˆλ‹€.
였늘 λŠ¦μž μžμ„œ 산책도 λͺ» κ°€κ³  μ•„μΉ¨ 곡뢀λ₯Ό λͺ»ν–ˆλ‹€.

TO DO πŸ”₯

  • 객체 곡뢀
  • μž¬κ·€ν•¨μˆ˜ 곡뢀
  • λ°°μ—΄ thisArgu
  • Node.js
  • React μž…λ¬Έ

Retrospect 🧐

였늘 μΌμ–΄λ‚˜λ‹ˆ λ‹€ν–‰νžˆ μˆ™μ·¨λŠ” κΉ”λ”ν•˜κ²Œ 날라갔닀.
λŒ€μ‹  λŠ¦μž μ„ 자긴 ν–ˆμ§€λ§Œ

λ°°μ—΄ λ©”μ†Œλ“œ 곡뢀에 이래 μ‹œκ°„μ΄ λ“œλŠ”λ° μ–Έμ œ 객체λ₯Ό 곡뢀할 것이며 μž¬κ·€ν•¨μˆ˜ 곡뢀λ₯Ό 할건지 걱정이닀.

였늘 μ½”ν”Œλ¦Ώ νŽ˜μ–΄λΆ„μ΄ λ°”λ€Œμ—ˆλŠ”λ° μ—­μ‹œ λŠλ‚Œμ΄ 쒋은 뢄이라 μ’‹μ•˜λ‹€.

νŒŒλ³΄λ‚˜μΉ˜ μˆ˜μ—΄μ„ μš”μ†Œλ‘œ κ°€μ§€λŠ” λ°°μ—΄ λ§Œλ“œλŠ” μ½”ν”Œλ¦Ώμ΄ μžˆμ—ˆλŠ”λ°,
λ‚˜λŠ” λ¬΄μ‹ν•˜κ²Œ λ³€μˆ˜ μ„ μ–Έ μŒ”λ¦¬ 갈기고 μ½”λ“œ ν•œ 20쀄은 μ¨μ„œ λ§Œλ“€μ–΄λƒˆλŠ”λ°,
νŽ˜μ–΄λΆ„ λ°©μ‹μœΌλ‘œλŠ” 10μ€„μ§œλ¦¬λ„ μ•ˆλ˜λŠ”κ±° 보고 쑰금 ν˜„νƒ€κ°€ μ™”λ‹€.

컴퓨터적 사고.. 컴퓨터적 사고.. λ‚΄κ°€ 컴퓨터가 λœλ‹€.. λ‚΄ λ‡Œκ°€ cpuλ‹€..

Reference πŸ™‡

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ - https://ko.javascript.info/
MDN - https://developer.mozilla.org/

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

0개의 λŒ“κΈ€