๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Language/JavaScript

JavaScript - ๋ฐฐ์—ด(Arrays)

by DevIseo 2022. 4. 27.

๐Ÿค๋ฐฐ์—ด(Arrays)

JavaScript์—์„œ์˜ ๋ฐฐ์—ด์€ “์ •์‹ ๋ฐฐ์—ด”์ด ์•„๋‹˜! “์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด”์ž„! →๊ฐ์ฒด

const a = []
typeof a //'object'

๋ฐฐ์—ด์˜ ์ •์˜์™€ ํŠน์ง•

  • ํ‚ค์™€ ์†์„ฑ๋“ค์„ ๋‹ด๊ณ  ์žˆ๋Š” ์ฐธ์กฐ ํƒ€์ž…์˜ ๊ฐ์ฒด(object)
  • ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ํŠน์ง•์ด ์žˆ์Œ
  • ์ฃผ๋กœ ๋Œ€๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑํ•˜๊ณ , 0์„ ํฌํ•จํ•œ ์–‘์˜ ์ •์ˆ˜ ์ธ๋ฑ์Šค๋กœ ํŠน์ • ๊ฐ’์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” array.length ํ˜•ํƒœ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • (์ฐธ๊ณ ) ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋Š” array.length – 1๋กœ ์ ‘๊ทผ
const numbers = [1,2,3,4,5]
console.log(numbers[0]) //1
console.log(numbers[-1]) //undefined
console.log(numbers.length)//5
console.log(numbers[numbers.length -1]) //5
console.log(numbers[numbers.length -2]) //4

๋ฐฐ์—ด ๊ด€๋ จ ์ฃผ์š” ๋ฉ”์„œ๋“œ

๊ธฐ๋ณธ ๋ฐฐ์—ด ์กฐ์ž‘

  • reverse
  • push & pop
  • unshift & shift
  • includes
  • indexOf
  • join

|reverse

  • array.reverse()
    • ์›๋ณธ ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์˜ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋Œ€๋กœ ์ •๋ ฌ
const numbers = [1,2,3,4,5]
numbers.reverse()
console.log(numbers) //[5,4,3,2,1]

|push & pop

  • array.push()
    • ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ๋’ค์— ์š”์†Œ ์ถ”๊ฐ€
  • array.pop()
    • ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ์ œ๊ฑฐ
const numbers = [1,2,3,4,5]
numbers.push(100)
console.log(numbers) // [1,2,3,4,5,100]
numbers.pop()
console.log(numbers) // [1,2,3,4,5]

|unshift & shift

  • array.unshift()
    • ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ์•ž์— ์š”์†Œ ์ถ”๊ฐ€
  • array.shift()
    • ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ ์ œ๊ฑฐ
const numbers = [1,2,3,4,5]

numbers.unshift(100)
console.log(numbers) // [100,1,2,3,4,5]

numbers.shift(100)
cosole.log(numbers) // [1,2,3,4,5]

|includes

  • array.includes(value)
    • ๋ฐฐ์—ด์— ํŠน์ • ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํŒ๋ณ„ ํ›„ ์ฐธ ๋˜๋Š” ๊ฑฐ์ง“ ๋ฐ˜ํ™˜
const numbers = [1,2,3,4,5]
console.log(numbers.includes(1)) //true
console.log(numbers.includes(100)) //false

|indexOf

  • array.indexOf(value)
    • ๋ฐฐ์—ด์— ํŠน์ • ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ ํ›„ ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ๋กœ ์ฐพ์€ ์š”์†Œ์˜ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜
    • ๋งŒ์•ฝ ํ•ด๋‹น ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ -1 ๋ฐ˜ํ™˜
const numbers = [1,2,3,4,5]
let result

result = numbers.indexOf(3) //2
console.log(result)

result = numbers.indexOf(100) //-1
console.log(result)

|join

  • array.join([seperator])
    • ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ตฌ๋ถ„์ž๋ฅผ ์ด์šฉํ•ด ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ˜ํ™˜
    • seperator(๊ตฌ๋ถ„์ž)๋Š” ์„ ํƒ์ ์œผ๋กœ ์ง€์ •๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ƒ๋žต์‹œ ์‰ผํ‘œ๋ฅผ ๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ
const numbers = [1,2,3,4,5]
let result

result = numbers.join()
console.log(result) // 1,2,3,4,5

result = numbers.join('')
console.log(result) //12345

result = numbers.join(' ')
console.log(result) // 1 2 3 4 5

result = numbers.join('-')
console.log(result) //1-2-3-4-5

|Seperator operator(...)

  • spread operator(…)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด ๋‚ด๋ถ€์—์„œ ๋ฐฐ์—ด ์ „๊ฐœ ๊ฐ€๋Šฅ.
  • ES5๊นŒ์ง€๋Š” Array.concat() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ.
  • ์–•์€ ๋ณต์‚ฌ์— ํ™œ์šฉ ๊ฐ€๋Šฅ
const array = [1, 2, 3]
const newArray = [0, ...array, 4]
console.log(newArray) // [0, 1, 2, 3, 4

๋ฐฐ์—ด ๊ด€๋ จ ์ฃผ์š” ๋ฉ”์„œ๋“œ (์‹ฌํ™” Array Helper Methods)

  • ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ํŠน์ • ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ
  • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์ธ์ž๋กœ callback ํ•จ์ˆ˜๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด ํŠน์ง•
    • callback ํ•จ์ˆ˜: ์–ด๋–ค ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋  ๋ชฉ์ ์œผ๋กœ ์ธ์ž๋กœ ๋„˜๊ฒจ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•จ
  • forEach
  • map
  • filter
  • reduce
  • find
  • some
  • every

|forEach

  • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” 3๊ฐ€์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ตฌ์„ฑ
    • element: ๋ฐฐ์—ด์˜ ์š”์†Œ
    • index: ๋ฐฐ์—ด ์š”์†Œ์˜ ์ธ๋ฑ์Šค
    • array: ๋ฐฐ์—ด ์ž์ฒด
  • ๋ฐ˜ํ™˜ ๊ฐ’(return)์ด ์—†๋Š” ๋ฉ”์„œ๋“œ
//# array.forEach(callback(element[, index[,array]])
array.forEach((element,index,array) => {
	//do something
}

const fruits = ['๋”ธ๊ธฐ','์ˆ˜๋ฐ•','์‚ฌ๊ณผ','์ฒด๋ฆฌ']
fruits.forEach((fruit,index) => {
	console.log(fruit,index)
})
//๋”ธ๊ธฐ 0
//์ˆ˜๋ฐ• 1
//์‚ฌ๊ณผ 2
//์ฒด๋ฆฌ 3

1,2,3 ์ถœ๋ ฅํ•˜๊ธฐ

const test = [1,2,3]
//๋ฐฉ๋ฒ•1
for (let i=0 ; i<test.length ; i++){
	console.log(test[i])
}
//๋ฐฉ๋ฒ•2
test.forEach(e=>console.log(e))
//๋ฐฉ๋ฒ•3
for(t of test){
	consonle.log(t)
}

|map

  • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ•œ๋ฒˆ์”ฉ ์‹คํ–‰
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์š”์†Œ๋กœ ํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ๋ฐ˜ํ™˜
  • ๊ธฐ์กด ๋ฐฐ์—ด ์ „์ฒด๋ฅผ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ€ ๋•Œ ์œ ์šฉ
//# array.map(callback(element[, index[, array]]))
array.map((elemnt,index,array) => {
	//do something
})

const numbers = [1,2,3,4,5]
const doubleNums = numbers.map((num) => {
	return num * 2
})

console.log(doubleNums) // [2,4,6,8,10]

|filter

  • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ์ฐธ์ธ ์š”์†Œ๋“ค๋งŒ ๋ชจ์•„์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜
  • ๊ธฐ์กด ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ํ•„ํ„ฐ๋ง ํ•  ๋•Œ ์œ ์šฉ
//# array.filter(callback(element[, index[, array]]))
array.filter((element,index,array) => {
	 //do something
})

const numbers = [1,2,3,4,5]
const oddNums = numbers.filter((num) => {
	return num %2
})
console.log(oddNums) //1,3,5

const test = [1,2,3]
test.filter(e => e%2 ===1) //[1,3]
test.filter(e => e%2 ===0) //[2]
test.filter(e => {
	return e%2===0
}) //[2]

|reduce

  • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’๋“ค์„ ํ•˜๋‚˜์˜ ๊ฐ’(acc)์— ๋ˆ„์  ํ›„ ๋ฐ˜ํ™˜
  • reduce ๋ฉ”์„œ๋“œ์˜ ์ฃผ์š” ๋งค๊ฐœ๋ณ€์ˆ˜
    • acc
      • ์ด์ „ callback ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ๋ˆ„์ ๋˜๋Š” ๋ณ€์ˆ˜
    • initialValue(optional)
      • ์ตœ์ดˆ์˜ callback ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ acc์— ํ• ๋‹น๋˜๋Š” ๊ฐ’, default ๊ฐ’์€ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’
  • (์ฐธ๊ณ ) ๋นˆ ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ initialValue๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ
//#array.reduce(callback(acc, element, [index[, array]])[, initialValue])
array.reduce((acc,element,index,array) => {
	//do something
}, initialValue)

const test = [1,2,3]
const res = test.reduce((acc,cur) => {
    return acc+cur
},0) //๋งˆ์ง€๋ง‰ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์‹œ์ž‘๊ฐ’?
res //6

|find

  • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ์ฐธ์ด๋ฉด, ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜
  • ์ฐพ๋Š” ๊ฐ’์ด ๋ฐฐ์—ด์— ์—†์œผ๋ฉด undefined ๋ฐ˜ํ™˜
//#array.find(callback(element[, index[, array]]))
array.find((element, index, array)) {
 // do something
}

const avengers = [
	{name: 'Tony Stark', age: 45},
	{name: 'Steve Rogers', age: 32},
	{name: 'Thor', age: 40},
}

const result = avengers.find((avengers) => {
	return avenvers.name === 'Tony Stark'
})
console.log(result) // {name: 'Tony Stark', age:45}

|some

  • ๋ฐฐ์—ด์˜ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ฃผ์–ด์ง„ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋ฉด ์ฐธ์„ ๋ฐ˜ํ™˜
  • ๋ชจ๋“  ์š”์†Œ๊ฐ€ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋ฉด ๊ฑฐ์ง“ ๋ฐ˜ํ™˜
  • (์ฐธ๊ณ ) ๋นˆ ๋ฐฐ์—ด์€ ํ•ญ์ƒ ๊ฑฐ์ง“ ๋ฐ˜ํ™˜
//#array.some(callback(element[, index[, array]]))
array.some((element,index,array) => {
	//do something
})

const numbers = [1,3,5,7,9]

const hasEvenNumber = numbers.some((num) => {
	return num % 2 ===0
})
console.log(hasEvenNumber) //false

const hasOddNumber = numbers.some((num) => {
	return num %2
})
console.log(hasOddNumber) //true

|every

  • ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์ฃผ์–ด์ง„ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋ฉด ์ฐธ์„ ๋ฐ˜ํ™˜
  • ํ•˜๋‚˜์˜ ์š”์†Œ๋ผ๋„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋ฉด ๊ฑฐ์ง“ ๋ฐ˜ํ™˜
  • (์ฐธ๊ณ ) ๋นˆ ๋ฐฐ์—ด์€ ํ•ญ์ƒ ์ฐธ ๋ฐ˜ํ™˜
//# array.every(callback(element[, index[, array]]))
array.every((element,index,array) => {
	//do something
})

const numbers = [2,4,6,8,10]

const isEveryNumberEven = numbers.every((num) => {
	return num % 2 ===0
})
console.log(isEveryNumberEven) //true

const isEveryNumberOdd = numbers.every((num) => {
	return num %2
})
console.log(isEveryNumberOdd) //false

|๋ฐฐ์—ด ์ˆœํšŒ ๋ฐฉ๋ฒ• ๋น„๊ต

const chars = ['A', 'B', 'C', 'D']
 // for loop
 for (let idx = 0; idx < chars.length; idx++) {
 console.log(idx, chars[idx])
 }
 // for ... of
 for (const char of chars) {
 console.log(char)
 }
 // forEach
 chars.forEach((char, idx) => {
 console.log(idx, char)
 })
 chars.forEach(char => {
 console.log(char)
 })
๋ฐฉ์‹ ํŠน์ง• ๋น„๊ณ 
for loop -๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ์ง€์›
-์ธ๋ฑ์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์˜ ์š”์†Œ์— ์ ‘๊ทผ
-break, continue ์‚ฌ์šฉ ๊ฐ€๋Šฅ
 
for...of -์ผ๋ถ€ ์˜ค๋ž˜๋œ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ์ง€์› X
-์ธ๋ฑ์Šค ์—†์ด ๋ฐฐ์—ด์˜ ์š”์†Œ์— ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
-break, continue ์‚ฌ์šฉ ๊ฐ€๋Šฅ
 
forEach -๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ์ง€์›
-break, continue ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ
Airbnb Style Guide ๊ถŒ์žฅ๋ฐฉ์‹

 

'Language > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JavaScript - this  (0) 2022.05.02
JavaScript - ๊ฐ์ฒด(Objects)  (0) 2022.04.27
JavaScript - ๋ฌธ์ž์—ด(String)  (0) 2022.04.26
JavaScript - ํ•จ์ˆ˜(function)  (0) 2022.04.26
JavaScript - ์กฐ๊ฑด๋ฌธ  (0) 2022.04.26

๋Œ“๊ธ€