• dmchoi
  • 자바스크립트 배열 메서드

    2022년 01월 06일

    배열 메서드

    자바스크립트에서 자주 사용되는 배열 메서드들에 대해 간단히 정리해봤습니다.

    splice()

    배열의 특정 원소를 지울 수 있습니다.
    arr.splice(n,m) : n 번째 인덱스부터 m개를 지워라!

    let arr = [0, 1, 2, 3, 4, 5];
    arr.splice(1, 2); // 1번 인덱스부터 2개 지워라
    
    console.log(arr); // [0, 3, 4, 5];

    arr.splice(n,m,x) : 특정 원소를 지우고 추가할 수 있습니다. x자리에 추가할 요소를 넣으면 됩니다.

    let arr = [1, 2, 3, 4, 5];
    
    arr.splice(1, 3, 100, 200);
    console.log(arr); // [1, 100, 200, 5]

    만약 m이 0이라면 어떻게 될까요?

    let arr = ["나는", "철수", "입니다"];
    arr.splice(1, 0, "대한민국", "소방관");
    
    console.log(arr); // ["나는", "대한민국","소방관","철수", "입니다"]

    특정 원소를 지우지 않고 추가만 합니다.


    splice()는 삭제된 요소를 반환합니다.

    let arr = [1, 2, 3, 4, 5];
    let result = arr.splice(1, 2);
    
    console.log(arr); // [1,4,5]
    console.log(result); // [2,3]

    slice()

    arr.slice(n,m) : n 번째 인덱스부터 m 번째 인덱스 전까지 반환합니다. 문자열 slice와 같습니다.
    그런데 만약 slice안에 비어 있으면 배열이 복사됩니다.

    let arr = [1, 2, 3, 4, 5];
    arr.slice();
    console.log(arr); // [1, 2, 3, 4, 5]

    splice와 slice 차이

    splice()는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경합니다. 즉 원본 배열 자체를 수정합니다. 반면에, slice()는 원본 배열을 수정하지 않고 새로운 배열을 만드는 것 입니다.

    forEach()

    배열의 원소들을 순회할 때 사용합니다.
    arr.forEach(function) : forEach는 함수를 인자로 받습니다.

    let uesrs = ['kim', 'lee', 'park']
    users.forEach((item,index,arr)=>{
        ...
    });
    
    // item은 배열의 원소
    // index는 0,1,2 ...
    // arr은 해당 배열입니다. 여기선 users
    // 보통 item,index까지 사용합니다.

    indexOf() / lastIndexOf()

    특정 원소의 인덱스를 반환합니다.

    let arr = [1, 2, 3, 4, 5, 1, 2, 3];
    
    arr.indexOf(3); // 2
    arr.indexOf(3, 3); // 7, 여기서 두 번째 파라미터는 시작위치 인덱스를 의미합니다.
    
    // 끝에서부터 찾고 싶으면
    arr.lastIndexOf(3); // 7

    filter()

    만족하는 모든 요소를 배열로 반환합니다.
    filter도 함수를 인수를 받습니다.

    let arr = [1, 2, 3, 4, 5, 6];
    
    // 짝수 찾기
    
    const result = arr.filter((item) => {
      return item % 2 === 0;
    });
    
    console.log(result); // [2, 4, 6]

    reverse()

    배열을 역순으로 재정렬합니다.

    let arr = [1, 2, 3, 4, 5];
    
    arr.reverse(); // [5, 4, 3, 2, 1]

    map()

    함수를 인수로 받아 특정 기능을 시행하고 새로운 배열을 반환합니다.

    // 예제
    let userList = [
      { name: "choi", age: 20 },
      { name: "kim", age: 15 },
      { name: "park", age: 32 },
    ];
    
    let newUserList = userList.map((user, index) => {
      return Object.assign({}, user, {
        id: index + 1,
        isAdult: user.age > 19,
      });
    });
    console.log(newUserList);
    console.log(userList);

    newUserList는 기존 배열인 userList에서 id값과 isAdult 프로퍼티를 포함한 새로운 배열입니다.

    join()

    배열의 원소들을 합쳐서 문자열을 만듭니다.

    let arr = ["Hello", "My", "is", "dmchoi"];
    
    let result = arr.join();
    
    console.log(result); // Hello,My,is,dmchoi.
    
    let result = arr.join("");
    
    console.log(result); // HelloMyisdmchoi

    split()

    문자열을 쪼개서 배열로 반환해줍니다.

    let str = "Nice to meet you";
    
    let result = str.split(" ");
    console.log(result); // [ 'Nice', 'to', 'meet', 'you' ]
    
    str.split("");
    console.log(result);
    // [
    // 'N', 'i', 'c', 'e',
    // ' ', 't', 'o', ' ',
    // 'm', 'e', 'e', 't',
    // ' ', 'y', 'o', 'u'
    // ]

    sort()

    배열을 정렬해줍니다. 배열 자체가 재정렬됩니다.

    let arr = [27, 8, 5, 13];
    arr.sort();
    console.log(arr); // [13, 27, 5, 8]

    뭔가 이상하죠? 기대한 결과값은 [5, 8, 13, 27] 이었는데

    sort는 배열 원소들을 문자열로 취급하기 때문에 그렇습니다.

    제대로된 정렬을 하고싶다면 값을 비교하는 함수를 인수로 전달하면 됩니다.

    arr.sort(fn);
    
    function fn(a, b) {
      return a - b;
    }
    
    // 아래와 동일합니다.
    
    arr.sort((a, b) => {
      return a - b;
    });

    두 수를 비교해서 양수인지, 음수인지, 0 인지를 판단하고 작은 수는 앞으로, 큰 수는 뒤로 보냅니다.

    reduce()

    reduce도 함수를 인수로 받습니다
    (누적계산값, 현재값) => { return 계산값 }

    let arr = [1, 2, 3, 4, 5];
    
    const result = arr.reduce((prev, cur) => {
      return prev + cur;
    }, 0);
    // 1부터 5까지 누적 계산값을 반환합니다.
    
    console.log(result); // 15
    
    // 여기서 0은 초기값, 안써주면 배열의 첫 번째 원소로 설정됨
    Tags
      © 2021 dmchoi, Powered By Gatsby.