forEach

Taehee Kimยท2022๋…„ 5์›” 17์ผ
1

JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
11/17
post-thumbnail

๐Ÿ“Œ forEach๋Š” ๋ฌด์—‡์ผ๊นŒ?

๋ฐ˜๋ณต๋ฌธ for์˜ ๊ณ ์ฐจํ•จ์ˆ˜๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด for๋ฌธ๊ณผ if ํ•จ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ์กฐ๊ฑด๋ฌธ์ด๋‚˜ ๋ฐ˜๋ณต๋ฌธ์˜ ๋กœ์ง์„ ์‰ฝ๊ฒŒ ์ฝํžˆ์ง€ ์•Š์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค.

์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ๊ฒƒ์€ forEach!
forEach ๋ฉ”์„œ๋“œ๋Š” ์ž์‹ ์˜ ๋‚ด๋ถ€์—์„œ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ž์‹ ์„ ๋ถˆ๋Ÿฌ๋‚ธ ๋ฐฐ์—ด์„ ์•Œ์•„์„œ ์ˆœํšŒํ•ด์ค€๋‹ค!
์ฆ‰, ๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์•„๋ž˜๋Š” ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ฐ๊ฐ for๊ณผ forEach๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

const arr = [10,20,30]
const num = []; 

//for ๊ตฌ๋ฌธ 
for(i=0; i<arr.length; i++){
	num.push(arr[i]*2);
}
console.log(num); //[20,40,60]

//forEach ๊ตฌ๋ฌธ 
arr.forEach(e => num.push(e*2))
console.log(num);//[20,40,60]

forEach๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์•„ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์ธ๋ฐ,
์˜ˆ์‹œ์˜ ๋ฐฐ์—ด์€ ์š”์†Œ๊ฐ€ 3๊ฐœ๋ผ์„œ 3๋ฒˆ์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

๐Ÿ“Œ forEach์˜ ์ž์„ธํ•œ ๊ตฌ์กฐ ๋ถ„์„

const num = [1,2,3]

//arrow Function ํ˜•ํƒœ
num.forEach((item,index,arr) => {arr[index] = item ** 2;};)
console.log(num);// [1,4,9]


//์ผ๋ฐ˜ fucntion
num.forEach(funciotn(item,index,arr){
    arr[index] = item ** 2;  
})
console.log(num);// [1,4,9]

1) item: forEach๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ’
2) index: forEach๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค
3) arr: forEach๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด

๐Ÿ“Œ Array.prototype.forEach.call(๋ฐฐ์—ด,(e))

๋ฌธ์ œ 1 ) p ํƒœ๊ทธ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ฌธ๊ตฌ์™€ํ•จ๊ป˜ ๊ฒฝ๊ณ ์ฐฝ์˜ ๋„์›Œ๋ผ

๊ธฐ๋ณธ for ๊ตฌ๋ฌธ ํ’€์ด

    <p>1. ์˜ค๋Š˜ ์ €๋…์—๋Š” ๋ถ€๋Œ€์ฐŒ๊ฒŒ๋ฅผ ๋“์—ฌ ๋จน๊ฒ ๋‹ค.<button type="button">์‚ญ์ œ</button></p>
    <p>2. ํ›„์‹์œผ๋กœ ์ŠˆํŒ…์Šคํƒ€๋ฅผ ๋จน๊ฒ ๋‹ค.<button type="button">์‚ญ์ œ</button></p>
    <p>3. ์ž๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ๋‚ด์ผ ์•„์นจ ๋ฉ”๋‰ด๋ฅผ ์ƒ๊ฐํ•ด๋‘๊ฒ ๋‹ค.<button type="button">์‚ญ์ œ</button></p>

<script>      
const txts = document.querySelectorAll('p');      
for(let i = 0; i <txts.length; i++){
	txts[i].addEventListener('click',(event) => {
    alert(event.target.textContent.slice(0,-2));
    })
}
</script>

forEach๋ฌธ์˜ ๋ฌธ์ œ

mdn ๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด Array.prototype.forEach๋ผ๊ณ  ์ ํ˜€์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ forEach๋Š” nodelist๋‚˜ HTMLcollection์— ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ forEach๊ฐ€ ie ์ง€์›์— ํ˜ธํ™˜๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋ฌผ๋ก  ๋ฐ”๋ฒจ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์„ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ˜ธํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, Array.prototype.forEach.call ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

const txts = document.querySelectorAll('p'); 

Array.prototype.forEach.call(txts,(item) => {
	item.addEventListener('click',(event) => {
    alert(event.target.textContent.slice(0,-2));
})

์ด ๋ฐฉ๋ฒ•์€ txts์— ์›๋ž˜ forEach๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•ด์ค€๋‹ค. ํ”„๋กœํ† ํƒ€์ž…์€ ๋ฉ”์†Œ๋“œ์˜ ์ €์žฅ๊ณต๊ฐ„์œผ๋กœ ๋ณด๋ฉด๋˜๋Š”๋ฐ, ๊ฐ์ฒด์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๐Ÿ“Œ for...of (๋ฌธ์ œ1๊ณผ ์—ฐ๊ฒฐ)

๋ฌธ์ œ2 ) ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ปดํŽŒ ์ฐฝ์ด ๋œจ๊ณ , ํ™•์ธ์ธ์„ ๋ˆ„๋ฅด๋ฉด p ํƒœ๊ทธ๋ฅผ ์‚ญ์ œํ•ด๋ผ

for (const item of btns) {
	item.addEventListener('click',(event) => {
	let result =  confirm('์‚ญ์ œํ• ๋ž˜?');
// ์ด๊ฑฐ ์•ˆํ•ด์ฃผ๋ฉด ๋ฒ„๋ธ”๋งํ•˜๋ฉด์„œ ์œ„์˜ p์˜ alert๋ฅผ ์‹คํ–‰
event.stopPropagation();
if(result){
	item.parentElement.remove();
}
})
}

txts.remove()๋ฅผ ํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ด์œ ๋Š” txts๋Š” ๋…ธ๋“œ๋ฆฌ์ŠคํŠธ๋ผ์„œ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋“ค์„ ๋‹ค ์ง€๋ชฉํ•˜๊ณ  ์žˆ์Œ!
๊ทธ๋ž˜์„œ ์ •ํ™•ํžˆ ๋ฒ„ํŠผ์ธ์ง€ p์ธ์ง€ ๊ฐ€๋ฅดํ‚ค๋Š” ๋Œ€์ƒ์„ ์•Œ ์ˆ˜ ์—†์–ด์„œ parentElement๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์งš์–ด์ค˜์•ผ ํ•จ.

confrim์˜ ํ™•์ธ ๋ฒ„ํŠผ์€ true, ์ทจ์†Œ๋Š” false๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€