map

const products = [
    {name: '반팔티', price: 15000},
    {name: '긴팔티', price: 20000},
    {name: '핸드폰케이스', price: 15000},
    {name: '후드티', price: 30000},
    {name: '바지', price: 25000}
  ]

<aside> 💡 위의 상품들의 이름이나 가격들을 따로 모아서 출력을 하는 경우 보통 아래와 같이 표현할 수 있을 것이다

</aside>

let names = []
for(const el of products) {
  names.push(el.name)
}
console.log(names) // [ '반팔티', '긴팔티', '핸드폰케이스', '후드티', '바지' ]

let prices = []
for(const el of products) {
  prices.push(el.price)
}
console.log(prices) // [ 15000, 20000, 15000, 30000, 25000 ]
const map = (iter) => {
  let res = []
  for (const el of iter) {
    res.push(el.price)
  }
  return res
}

console.log(map(products)) // [ 15000, 20000, 15000, 30000, 25000 ]

<aside> 💡 하지만 위와 같은 경우에는 추상화를 통한 재사용이 힘든 함수가 된다 변수로 받은 iter에서 추출하고 싶은 데이터를 직접 코딩해야 하기 떄문에 아래와 같이 추상화를 적용해주자

</aside>

const map = (f, iter) => {
  let res = []
  for (const el of iter) {
    res.push(f(el))
  }
  return res
}

console.log(map((el) => el.price, products)) // [ 15000, 20000, 15000, 30000, 25000 ]
console.log(map((el) => el.name, products)) // [ '반팔티', '긴팔티', '핸드폰케이스', '후드티', '바지' ]

목차로 이동🚀

이터러블 프로토콜을 따른 map의 다향성

<script>
  console.log(document.querySelectorAll('*'))
</script>

스크린샷 2022-09-19 오전 10.28.51.png

<aside> 💡

배열과 같은 결과를 받았으니 map을 통해서 순회해봅시다!

</aside>

<script>
  console.log(document.querySelectorAll('*').map(el => el))
</script>

스크린샷 2022-09-19 오전 10.30.34.png