16. Javascript 배열과 메서드

2022. 11. 27. 15:55JavaScript

목차
1. 배열과 메서드
2. Array.prototype.forEach()
  2.1. 단점
3. Array.prototype.filter()

 


1. 배열과 메서드

  • JavaScript에서 기본적으로 배열을 많이 사용한다.
    • 배열안에 있는 객체
    • 객체안의 배열 등등
    • 배열은 for문과 함께 사용한다. 인덱스 값을 이용하여, for문과 함께 사용할 때 좀 더 많은 활용이 가능하다.
    • 이런 이유로 배열 메서드들은 반복을 돌려주는 함수들이 정말 많다.
      • forEach
      • filter
      • some
      • map
      • reduce
const arr = [2, 7, 5, 4, 5]
for(let i = 0; i < arr.length; i++){
    console.log(arr[i])
}
//2, 7, 5, 4, 5

2. Array.prototype.forEach()

  • 주어진 함수를 배열 요소 각각에 대해 실행할 수 있게 해준다.
  • 인자에 함수를 넣는 콜백함수이다. (구현방식)
    • 콜백함수의 첫번째 매개변수는 요소값
    • 콜백함수의 두번째 매개변수는 인덱스값
  • 단, 반복문을 멈출 수가 없다는 게 단점이다.

구현방식은 다음과 같다.

const arr = [2, 7, 5, 4, 5]

// 인자값: function
// 콜백함수
arr.forEach(function(value){
    console.log(value)
})

arr.forEach(function(value, index){
    console.log(value, index)
})

//====================================
let obj = {
    arr: [2, 7, 5, 4, 5],
    length: 5,
    forEach: function(callback){
        for(let i = 0; i < obj.length; i++) {
            callback(obj.arr[i], i)
        }
    },
}

function loop(value, index){
    console.log(obj.length, value, index)
}

obj.forEach(loop)
// 5 0
// 5 1
// 5 2
// 5 3
// 5 4

 

2.1 단점

 

단점으로는 반복을 멈추고 싶어도 멈출 수 없다는 점이다.

아래의 코드로 index값이 3인 경우에는 return을 하고싶지만, 그렇게 이루어지지 않는 것을 볼 수 있다.

const arr = [2, 7, 5, 4, 5]

arr.forEach(function(value, index) {
    if(index === 3) return
    console.log(value, index)
})

function loop(value, index){
    if(index === 3) return
    console.log(value, index)
}

arr.forEach(loop)
// 2 0
// 7 1
// 5 2
// 5 4
// 2 0
// 7 1
// 5 2
// 5 4

 


3. Array.prototype.filter()

 

  • 기본적인 사용방법은 forEach()와 같다.
  • 기존의 배열은 조작하지 않는다.
    • 새로운 배열의 조건에 맞는 값을 넣는다.

Q. 값이 5인 배열을 찾아 배열에 넣어라.

위의 문제를 for문과 filter를 사용해 풀어보자.

  • for문
const arr = [2, 7, 5, 4, 5]
const arr2 = []

for(let i = 0; i < arr.length; i++){
    if(arr[i] === 5) {
        arr2.push(arr[i])
    }
}
  • filter
const arr = [2, 7, 5, 4, 5]
const arr2 = arr.filter(v => v === 5)
console.log(arr2)

 

 

filter의 코드가 더 짧게 나타난다. filter는 어떤 방식으로 구현되는지 한 번 알아보자.

let obj = {
    arr: [2, 7, 5, 4, 5],
    length: 5,
    // forEach
    forEach: function(callback){
        for(let i = 0; i < obj.length; i++) {
            callback(obj.arr[i], i)
        }
    },
    // filter
    filter: function(callback){
        const newArr = []

        for(let i = 0; i < obj.length; i++) {
            const bool = callback(obj.arr[i], i)
            if(bool) {
                newArr.push(obj.arr[i])
            }
        }
        return newArr //forEach와의 차이점
    },
}

const newArr = obj.filter((v, i) => {
    return v === 5
})

 


 

'JavaScript' 카테고리의 다른 글

Javascript Promise  (0) 2022.12.21
17. Javascript 심화학습  (0) 2022.11.27
14. Javascript.실습 C.R.U.D  (1) 2022.11.20
13. Javascript.실습 Counter와 C.R.U.D  (0) 2022.11.18
12. Javascript. 실습 이벤트를 이용한 Menu 구현  (0) 2022.11.15