Notice
Recent Posts
Recent Comments
Link
ยซ   2024/09   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

Lennon FE

[JavaScript] Array, Set, Map์„ ํ†ตํ•ด ์•Œ์•„๋ณด๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”/์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋ณธ๋ฌธ

๐Ÿง‘‍๐Ÿ’ป Web/JavaScript

[JavaScript] Array, Set, Map์„ ํ†ตํ•ด ์•Œ์•„๋ณด๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”/์ดํ„ฐ๋ ˆ์ดํ„ฐ

Lennon 2022. 7. 19. 00:30
728x90
๋ฐ˜์‘ํ˜•

Array๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์—” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

๊ณ ์ „์ ์ด๋ผ๋ฉด

const arr = [1,2,3,4,5]

for(let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

์ด๋ ‡๊ฒŒ ์ˆœํšŒ๋ฅผ ํ•  ๊ฒƒ์ด๊ณ ,

 

forEach, filter, reduce, map ๋“ฑ๋“ฑ ๋ฐฐ์—ด ์ˆœํšŒ ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์šฐ์…จ๋‹ค๋ฉด ๋‹จ์ˆœ ์ˆœํšŒ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด

const arr = [1,2,3,4,5]

arr.forEach(v => {
    console.log(v);
})

forEach๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

 

๋˜๋Š”, ์ดํ„ฐ๋Ÿฌ๋ธ”, ์ดํ„ฐ๋ ˆ์ดํ„ฐ์˜ ๊ฐœ๋…์„ ์•Œ๊ฑฐ๋‚˜, ๋ญ”๊ฐ€ ์ด๋ ‡๊ฒŒ ์“ฐ๋Š” ๊ฒŒ ์ข‹๋‹ค๊ณ  ๋“ค์œผ์…จ๋‹ค๋ฉด

const arr = [1,2,3,4,5]

for(const a of arr) {
    console.log(a);
}

for of๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”, ์ดํ„ฐ๋ ˆ์ด์…˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ คํ•œ๋‹ค.

 

๋จผ์ € ์ดํ„ฐ๋Ÿฌ๋ธ”, ์ดํ„ฐ๋ ˆ์ด์…˜์— ๋Œ€ํ•œ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

 

์ดํ„ฐ๋Ÿฌ๋ธ”

์ดํ„ฐ๋ ˆ์ด์…˜์„ ๋ฆฌํ„ดํ•˜๋Š” [Symbol.iterator]()๋ฅผ ๊ฐ€์ง„ ๊ฐ’

์ดํ„ฐ๋ ˆ์ด์…˜

{ value, doen } ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” next() ๋ฅผ ๊ฐ€์ง„ ๊ฐ’

 

๊ฐœ๋…๋งŒ ๋ณด๋ฉด ์–ด๋–ค ๊ฒƒ์ธ์ง€ ํ™• ์™€๋‹ฟ์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ดํŽด๋ณด์ž.

const arr = [1,2,3,4,5];
const iteration = arr[Symbol.iterator]();

for(const a of arr) {
    console.log(a);
}

Array๋Š” ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋‹ค. ๊ทธ๋ž˜์„œ arr[Symbol.iterator]() ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

console.log๋ฅผ ์ฐ์–ด๋ณด๋ฉด

Array Iterator๋ผ๊ณ  ์นœ์ ˆํ•˜๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.

๊ทธ๋Ÿผ ์ดํ„ฐ๋ ˆ์ด์…˜์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ next()๊ฐ’์„ ํ™•์ธํ•ด๋ณด์ž

const arr = [1,2,3,4,5];
const iteration = arr[Symbol.iterator]();

iteration.next();
iteration.next();
iteration.next();
iteration.next();
iteration.next();
iteration.next();

์œ„๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

์œ„ ์ดํ„ฐ๋ ˆ์ด์…˜ ๊ฐœ๋…๊ณผ ๊ฐ™์ด value์™€ done์„ ๊ฐ€์ง„ ๊ฐ’๋“ค์ด ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅ๋œ๋‹ค. 5๊นŒ์ง€ ๋ฐ–์— ์—†์œผ๋ฏ€๋กœ ๊ทธ ๋‹ค์Œ๋ถ€ํ„ด done์ด true๊ฐ€ ๋œ๋‹ค.

 

for of๋ฌธ์€ ํ•ด๋‹น ์ดํ„ฐ๋ ˆ์ด์…˜๋“ค์„ ์ˆœํšŒํ•˜๊ธฐ ์œ„ํ•ด ์žˆ๋Š” ์ˆœํšŒ๋ฌธ์ด๋‹ค.

์œ„์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ์—์„œ for of๋ฌธ์€ done์ด true๋ฉด ์ˆœํšŒ๋ฌธ์„ ํƒˆ์ถœํ•˜๋Š” ์กฐ๊ฑด์„ ๊ฐ€์ง„ ์ˆœํšŒ๋ฌธ์ธ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๊ฑธ ์–ด๋””์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ?

 

Map, Set

๋ฐฐ์—ด์ด ์•„๋‹Œ map, set์€ ๋‹จ์ˆœ for๋ฌธ์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฑธ ๊ฒฝํ—˜ํ•œ ์  ๋‹ค๋“ค ์žˆ์„๊ฒƒ์ด๋‹ค. ์ด์œ ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ํ™•์ธํ•ด๋ณด์ž.

const set = new Set([1, 2, 3, 4, 5]);
const map = new Map([['a', 1],['b', 2],['c', 3]]);

console.log(set[1]);  // undefined
console.log(map[1]);  // undefined

console.log(set[Symbol.iterator]()); 
// SetIterator {1, 2, 3, 4, 5}
console.log(map[Symbol.iterator]());
// MapIterator {'a' => 1, 'b' => 2, 'c' => 3}

set, map์€ ๋‹จ์ˆœ ์ธ๋ฑ์Šค ์ˆœํšŒ๋กœ๋Š” ๊ฐ’์„ ์ˆœํšŒํ•  ์ˆ˜ ์—†๋‹ค.

์ดํ„ฐ๋ ˆ์ด์…˜์ธ ๊ฑธ ํ™•์ธํ–ˆ์œผ๋‹ˆ next()๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž!

const set = new Set([1, 2, 3, 4, 5]);
const map = new Map([['a', 1],['b', 2],['c', 3]]);

const setIter = set[Symbol.iterator]();
setIter.next();  // {value: 1, done: false}
setIter.next();  // {value: 2, done: false}

const mapIter = map[Symbol.iterator]();
mapIter.next(); // {value: Array(2), done: false}
mapIter.next(); // {value: Array(2), done: false}

์ดํ„ฐ๋ ˆ์ด์…˜์ด๋ฏ€๋กœ nextํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด { value, done } ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋ฅผ ๋ฝ‘์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ map๊ณผ set์€

{ value, done } ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•˜๋Š” for of๋ฌธ์„ ์‚ฌ์šฉํ•ด ์ˆœํšŒํ•ด์•ผํ•œ๋‹ค.

 

map์€ key, value ๋ณ„๋กœ ๋”ฐ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋„ ์กด์žฌํ•œ๋‹ค.

const set = new Set([1, 2, 3, 4, 5]);
const map = new Map([['a', 1],['b', 2],['c', 3]]);

for(const a of set) {
    console.log(a) // 1, 2, 3, 4, 5
}

for(const a of map) {
    console.log(a) // ['a', 1], ['b', 2], ['c', 3]
}

for(const a of map.keys()) { // ํ‚ค๋งŒ ์ˆœํšŒ
    console.log(a) // 'a', 'b', 'c'
}

for(const a of map.values()) { // ๊ฐ’๋งŒ ์ˆœํšŒ
    console.log(a) // 1, 2, 3
}

for(const a of map.entries()) { // ๋‘˜ ๋‹ค ์ˆœํšŒ =>
    console.log(a) // ['a', 1], ['b', 2], ['c', 3]
}
728x90
๋ฐ˜์‘ํ˜•
Comments