[JavaScript] 06 Array

2021. 9. 15. 22:02·frontend/javascript

이번 게시글에서는 배열(Array)을 다뤄 볼 것이다. 코드 상에서 데이터를 다룰 때, JS 뿐만 아니라 다른 언어들에서도 이 배열을 많이 사용하게 된다. 자바스크립트에서 배열 또한 하나의 객체로서, 이 Array 객체 내부에는 여러가지 필드변수와 메소드들이 정의되어 있다. 배열을 사용할 때는 Array 객체의 필드변수 및 메소드들이 정리된 API를 익히고, 각각을 잘 활용할 수 있어야 한다.

 


 

1. Declaration

 

 배열을 선언하는 방법에는 크게 두 가지로 나눌 수 있다. 

const arr = new Array();
const arr = [];

 

2. Index Position

 

다른 프로그래밍 언어들과 마찬가지로, 인덱스(index)를 통해 배열 요소에 접근할 수 있다.

const fruits = ['apple', 'banana'];

console.log(fruits.length); // 2

console.log(fruits[0]); // apple
console.log(fruits[1]); // banana
console.log(fruits[2]); // undefined

 

그리고 배열의 맨 마지막 요소에 접근할 경우에는 다음과 같은 표현식을 주로 사용한다.

console.log(fruits[fruits.lenght - 1]); // last item

 

 

3. Looping over an Array

 

루프를 이용하여 배열에 저장된 요소 모두에 한 번씩 접근하고, 루프 블럭에 정의된 명령어들을 수행할 수 있다. 

// print all fruits

// 1. for of
for(let fruit of fruits) {
    console.log(fruit);
}

// 2. forEach
fruits.forEach((fruit) => console.log(fruit));

 

참고로 여기서 forEach 메소드는 배열에 저장된 각 요소에 차례대로 하나씩 접근하면서, 파라미터로 전달한 함수를 호출(실행)하는 메소드이다. 여기서 함수를 호출할 때 파라미터로 각 요소 값뿐만 아니라, 현재 요소의 인덱스 값, 배열 그 자체를 파라미터로 전달받을 수도 있다. (API 참고)

 

 

4. Addition, Deletion, Copy

 

  • push - add an item to the end (similar to stack push)
    fruits.push('strawberry', 'peach');
    console.log(fruits); // ['apple', 'banana', 'strawberry', 'peach']​
    push() 메소드는 파라미터로 넘겨받은 요소들을 리스트 마지막에 추가시킨다. 
  • pop - remove an item from the end (similar to stack pop)
    fruits.pop();
    console.log(fruits); // ['apple', 'banana', 'strawberry']
    pop() 메소드는 리스트의 마지막 요소를 삭제한다. 
  • unshift - add an item to the beginning
    fruits.unshift('lemon');
    console.log(fruits); // ['lemon', 'apple', 'banana', 'strawberry']
     unshift() 메소드는 파라미터로 전달받은 요소를 리스트의 맨 앞에 추가시킨다. 


  • shift - remove an item from the beginning
    fruits.shift();
    console.log(fruits); // ['apple', 'banana', 'strawberry']
    shift() 메소드는 리스트의 맨 앞의 요소를 삭제한다. 

    - 여기서 짚고 넘어갈 점은 shift와 unshift는 pop, push 보다 속도가 느리다는 것이다. 

  •  splice - remove an item by index position
    fruits.push('lemon');
    fruits.push('orange');
    // ['apple', 'banana', 'strawberry', 'lemon', 'orange']
    
    fruits.splice(1, 1); // start index, count
    console.log(fruits); // ['apple', 'strawberry', 'lemon', 'orange']
    splice() 메소드는 첫 번째 파라미터로 시작 인덱스를 전달받고, 두 번째 파라미터로 갯수를 전달받게 된다. 이렇게 전달받은 두 정보를 통해 시작 인덱스부터 주어진 갯수만큼 요소를 없앤다. 

    이렇게 리스트 내의 특정 요소를 제거하는 경우뿐 아니라, 다음과 같이 특정 요소를 다른 요소(들)로 대체하는 경우에도 이 메소드를 활용할 수 있다.
    fruits.splice(1, 1, 'melon', 'watermelon');
    console.log(fruits); // ['apple', 'melon', 'watermelon', 'lemon', 'orange']
     이런 식으로 세 번째 파라미터부터 해당 리스트에 추가하고자 하는 요소들을 순서대로 나열하면 된다. 

    - 이 splice 메소드는 해당 리스트 그 자체를 수정한다는 점을 주의하자.


  •  concat - combine two arrays
    const fruits2 = ['strawberry', 'peach'];
    const newFruits = fruits.concat(fruits2);
    console.log(newFruits); // ['apple', 'melon', 'watermelon', 'lemon', 'orange', 'strawberry', 'peach']
     concat 을 호출한 리스트의 맨 뒤에, concat의 파라미터로 전달한 리스트의 요소들을 추가하고, 두 리스트의 요소가 합쳐진 새로운 리스트를 반환한다. 이 과정에서 합쳐진 두 리스트는 수정되지 않는다는 것이 특징이다. 

5. Searching

  • indexOf - find the index
    console.log(fruits.indexOf('apple')); // 0
    console.log(fruits.indexOf('banana')); // -1
     리스트 내부에서 특정 요소의 인덱스 값을 알고싶다면, indexOf 메소드를 사용할 수 있다. 위 예제에서 볼 수 있듯이, 만약 리스트 내부에 파라미터로 전달한 요소가 존재하지 않는 경우에는 -1 값을 리턴하게 된다. 
  • includes
    console.log(fruits.includes('banana')); // false
    console.log(fruits.includes('lemon')); // True
    리스트 내부에 특정 요소가 존재하는지 알고싶다면, includes 메소드를 사용할 수 있다. 만약 파라미터로 전달한 요소가 해당 리스트에 존재하는 경우 true를 반환하고, 존재하지 않는다면 false를 리턴한다. 


  • lastIndexOf
    fruits.push('apple');
    // ['apple', 'melon', 'watermelon', 'lemon', 'orange', 'apple']
    
    console.log(fruits.indexOf('apple'); // 0
    console.log(fruits.lastIndexOf('apple'); // 5
     만약 리스트 내부에 중복되어 저장되어 있는 요소들 중, 가장 마지막에 위치한 요소의 인덱스 값을 알고싶다면 lastIndexOf 메소드를 사용할 수 있다. indexOf 메소드 같은 경우에는 중복된 요소들 중 가장 앞에 위치한 요소의 인덱스 값을 리턴하는 반면에, lastIndexOf 메소드 같은 경우에는 중복된 요소들 중 가장 마지막에 위치한 요소의 인덱스 값을 리턴하는 것을 볼 수 있다. 


 

'frontend > javascript' 카테고리의 다른 글

[JavaScript] 이벤트 함수를 callback 함수로 호출  (0) 2021.12.21
[JavaScript] 05 Objects  (0) 2021.09.02
[JavaScript] 04 Class  (0) 2021.08.26
[JavaScript] 03 Operators  (0) 2021.08.26
[JavaScript] 02 Function  (0) 2021.08.26
'frontend/javascript' 카테고리의 다른 글
  • [JavaScript] 이벤트 함수를 callback 함수로 호출
  • [JavaScript] 05 Objects
  • [JavaScript] 04 Class
  • [JavaScript] 03 Operators
민똔
민똔
  • 민똔
    기록은 기억보다 오래 머무른다
    민똔
  • 전체
    오늘
    어제
    • All (24)
      • web (1)
      • frontend (12)
        • javascript (8)
        • CSS (1)
        • react (2)
      • backend (3)
        • CS (1)
        • java (1)
        • spring (1)
      • algorithm (2)
      • 우아한테크코스 7기 (6)
        • 회고 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    백준 11000
    SOLID
    백준
    LSP
    Session
    httpOnly cookie
    access token
    Session Storage
    JWT
    리팩토링
    Java
    개방 폐쇄 원칙
    Local Storage
    secure cookie
    로그인 기능 구현
    css
    SUBSELECT
    fetch join
    cookies
    OCP
    batchsize
    Refresh Token
    일급 컬렉션
    그리디 알고리즘
    개발
    객체지향
    spring
    N+1 문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
민똔
[JavaScript] 06 Array
상단으로

티스토리툴바