๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

querySelectorAll() ์€ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ “๋ฐฐ์—ด์ด ์•„๋‹ˆ๋‹ค.”

๊ทธ๋ž˜์„œ map(), filter() ๊ฐ™์€ ๋ฐฐ์—ด ์ „์šฉ ๋ฉ”์„œ๋“œ๋ฅผ ์“ธ ์ˆ˜ ์—†๋‹ค. Array.from() ์œผ๋กœ ์ง„์งœ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.


1) querySelectorAll()์˜ ๋ฐ˜ํ™˜๊ฐ’์€ “NodeList”

์˜ˆ๋ฅผ ๋“ค์–ด:

const checked = document.querySelectorAll(".row-check:checked");

checked ๋Š” ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋‹ค.
์ •ํ™•ํ•œ ํƒ€์ž…์€ NodeList ๋ผ๋Š” “์œ ์‚ฌ๋ฐฐ์—ด ๊ฐ์ฒด”.

์œ ์‚ฌ๋ฐฐ์—ด์ด๋ž€:

  • ๊ธธ์ด(length) ์žˆ์Œ
  • ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ

ํ•˜์ง€๋งŒ,

  • map() ์—†์Œ
  • filter() ์—†์Œ
  • reduce() ์—†์Œ

์ฆ‰, ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ƒ๊ฒผ์ง€๋งŒ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋‹ค.


2) NodeList์™€ ๋ฐฐ์—ด(Array)์˜ ์ฐจ์ด

ํŠน์ง• NodeList Array
length ์žˆ์Œ O O
์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ O O
map(), filter() ์‚ฌ์šฉ X O
push(), pop() ์‚ฌ์šฉ X O
์ง„์งœ ๋ฐฐ์—ด? X O

์ฆ‰,

NodeList = ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๊ธฐ๋Šฅ์ด ์ œํ•œ๋จ.


3) ๊ทธ๋Ÿผ ์™œ Array.from()์„ ์“ฐ๋ƒ?

๋ฐ”๋กœ ์“ธ ์ˆ˜ ์—†๋Š” NodeList๋ฅผ
์™„์ „ํ•œ ๋ฐฐ์—ด(Array)๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ.

const arr = Array.from(checked);

→ ์ด์ œ arr์€ ์ง„์งœ ๋ฐฐ์—ด์ด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด:

arr.map(...)
arr.filter(...)
arr.reduce(...)

๋ชจ๋“  ๋ฐฐ์—ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 


โœ” querySelectorAll → NodeList(์œ ์‚ฌ๋ฐฐ์—ด, map ์—†์Œ)

โœ” Array.from(NodeList) → ์ง„์งœ Array

โœ” Array.map(el ⇒ … ) ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๊ทธ๋ž˜์„œ ์ˆœ์„œ๊ฐ€ ์ด๋ ‡๊ฒŒ ๋œ๋‹ค:

const checked = document.querySelectorAll(".row-check:checked");  
// NodeList

const ids = Array.from(checked).map(el => el.dataset.id);
// Array → id ๋ฐฐ์—ด ์ƒ์„ฑ

 

๋ฐ˜์‘ํ˜•