LHJ

I'm a FE developer.

13-8. Array 오브젝트(ES3 기준) / 엘리먼트 삭제

02 Dec 2020 » js_beginner

13-8. Array 오브젝트(ES3 기준) / 엘리먼트 삭제

shift()

구분데이터(값)
data대상
파라미터사용하지 않음
반환삭제한 엘리먼트

  • 배열의 첫 번째 엘리먼트 삭제
  • 삭제한 엘리먼트 값이 undefined로 남지 않고 완전히 삭제됨

    • length 값이 하나 줄어듬

        var value = [1, 2, 34];
        console.log(value.shift()); // 1
        console.log(value); // [2, 34]
      

      1번 인덱스인 2가 0번 인덱스로
      2번 인덱스인 34가 1번 인덱스로 이동하였습니다.
      하나씩 앞으로 당겨집니다.


  • 빈 배열이면 undefined가 반환됨

      var result = [].shift();
      console.log(result); // undefined
    

pop()

구분데이터(값)
data대상
파라미터사용하지 않음
반환삭제한 엘리먼트

  • 배열의 마지막 엘리먼트 삭제
  • 삭제한 엘리먼트 값이 undefined로 남지 않고 완전히 삭제됨

    • length 값이 하나 줄어듬

        var value = [1, 2, 34];
        console.log(value.pop()); // 34
        console.log(value); // [1, 2]
      

  • 빈 배열이면 undefined 반환

      var result = [].pop();
      console.log(result); // undefined
    

splice()

구분데이터(값)
data대상
파라미터첫번째 파라미터: 시작 인덱스, 디폴트 0
두번째 파라미터: 삭제할 엘리먼트 수
세번째 파라미터: 추가할 엘리먼트 [item1 [, item2 [, …]]]opt
반환[결과]

  • 엘리먼트를 삭제하고 삭제한 엘리먼트 반환

      var value = [1, 2, 3, 4, 5];
      console.log(value.splice(1, 3)); // [2, 3, 4]
      console.log(value); // [1, 5]
    
    1. 1번 인덱스부터 엘리먼트 3개를 삭제
    2. 위의 엘리먼트가 앞으로 당겨집니다.

  • shift()는 맨 앞을 삭제
  • pop()은 맨 뒤를 삭제
  • splice()는 중간을 삭제

splice로도 첫번째와 마지막을 삭제할 수 있지만 시멘틱 차원에서 shift, pop을 사용하는 것이 좋다.

delete와 달리 undefined를 설정하지 않고 배열의 전체를 삭제할 수 있다.


  • 삭제한 위치에 세번째 파라미터 삽입

      var value = [1, 2, 3, 4, 5];
      console.log(value.splice(1, 3, "A", "B")); // [2, 3, 4]
      console.log(value); // [1, "A", "B", 5]
    

  • 파라미터를 작성하지 않으면?

      var value = [1, 2, 3, 4, 5];
      console.log(value.splice()); // []
      console.log(value); // [1, 2, 3, 4, 5]
    
    1. 삭제하지 않습니다.
    2. 삭제한 것이 없으므로 빈 배열 반환

    시작 인덱스의 디폴트 값은 0입니다.
    그래서 0번부터 지우려고 하는데, 몇 개를 지우라는 건지는 모릅니다.
    그래서 안 지웁니다.