Front-End

[자바스크립트] JSON 데이터를 담고 있는 배열의 객체를 삭제하는 방법

서버로 부터 받아온 JSON타입의 문자열을 배열(array)에 담고 삭제하기 위해 기존에 알고 있던 splice()메서드를 사용하여 처리하였다. 서버로 부터 받아온 데이터를 화면에 table 태그를 사용하여 표현하였다.

구현된 샘플 화면은 다음과 같다.


X버튼을 누르면 삭제를 진행한다.

Vue.js 환경에서 개발중인데, 아래와 같이 splice() 함수에 인덱스 번호를 변수로 받아서 처리하였다.

    delWords(index) {
      // console.log(`${JSON.stringify(this.data.selectedList.length)}`);
      this.data.selectedList.splice(index);
    },

그런데 내가 알고 있는 splice()에 대한 정의를 다시해야하는 오늘이다. 왜냐하면 선택된 인덱스 기준값으로  그 뒤에 오는 모든 배열의 데이터가 삭제되었기 때문이다. 나는 지금까지 splice()메서드가 지정한 인덱스의 배열 객체만 삭제하는 것으로 알고 있었는데, 삭제를 시작할 인덱스 값이었다. 개발자 문서(splice)를 봐야하는 이유를 다시 한 번 절실하게 느꼈다. 문서를 보니 splice()메서드는 삭제와 동시에 배열에 데이터를 추가할 수 도 있었다.(충격)

 

 

배열에서 특정 JSON객체의 배열만 삭제해야 할 경우 

splice의 인자값은 splice(삭제 대상 시작 인덱스, 시작 인덱스 기준으로 삭제할 데이터 기준 개수)

this.data.selectedList.splice(index, 1);

샘플 JSON 데이터 타입의 배열은 다음과 같다.

[{
	"textId":1
	,"itemNm":"제품1"
	,"text":"Saltan은 타 점안용기에 .....환자들이 사용하기 편리한 제품입니다"
}
,{
	"textId":2
	,"itemNm":"제품1"
	,"text":"SX 핵심전략 ?"}
,{
	"textId":5
	,"itemNm":"제품1"
	,"text":"Google 뉴스"}
,{
	"textId":6
	,"itemNm":"제품1"
	,"text":"한미일 국방장관 "북한 미사일 위협 맞서 긴밀 공조"
}]

 

JSON 객체 배열의 데이터 중복 제거 하는 방법

기본 필터 사용법 포스팅을 참고하세요

 

[Vue.js] filter(필터) 기본 사용법 및 전역 filter 설정 방법: 검색 필터 샘플 스크립트 및 돈 콤마 찍

Vue.js는 필터(filter)를 사용하여 텍스트의 형식화를 적용할 수 있다. 가령, 숫자 3자리 수 마다 콤마 찍기(돈 표기법), 또는 텍스트로 입력받은 값을 날짜형식으로 포맷팅하거나, 입력받은 문자를

playground.naragara.com

 

splice()메서드의 구문(문법)

array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

 

splice() 메서드 매개변수 

매개변수 설명
start  배열의 변경을 시작할 인덱스입니다. 
배열의 길이보다 큰 값이라면 실제 시작 인덱스는 배열의 길이로 설정됩니다.
음수인 경우 배열의 끝에서부터 요소를 세어나갑니다
(원점 -1, 즉 -n이면 요소 끝의 n번째 요소를 가리키며 array.length – n번째 인덱스와 같음).
값의 절대값이 배열의 길이 보다 큰 경우 0으로 설정됩니다.
deleteCount 
  • deleteCount : Optional배열에서 제거할 요소의 수입니다.
  • deleteCount를 생략하거나 값이 array.length – start보다 크면 start부터의 모든 요소를 제거합니다.
  • deleteCount가 0 이하라면 어떤 요소도 제거하지 않습니다. 이 때는 최소한 하나의 새로운 요소를 지정해야 합니다.
item1, item2, … Optional배열에 추가할 요소입니다.
아무 요소도 지정하지 않으면 splice()는 요소를 제거하기만 합니다.

 

splice() 메서드 리턴값(반환 값)

제거한 요소를 담은 배열. 하나의 요소만 제거한 경우 길이가 1인 배열을 반환합니다. 아무 값도 제거하지 않았으면 빈 배열을 반환합니다. 만약 제거할 요소의 수와 추가할 요소의 수가 다른 경우 배열의 길이는 달라집니다.

 

하나도 제거하지 않고, 2번 인덱스에 “drum” 추가

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2, 0, 'drum');

// myFish is ["angel", "clown", "drum", "mandarin", "sturgeon"]
// removed is [], no elements removed
 
 

하나도 제거하지 않고, 2번 인덱스에 “drum”과 “guitar” 추가

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2, 0, 'drum', 'guitar');

// myFish is ["angel", "clown", "drum", "guitar", "mandarin", "sturgeon"]
// removed is [], no elements removed

 

3번 인덱스에서 한 개 요소 제거

var myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon'];
var removed = myFish.splice(3, 1);

// removed is ["mandarin"]
// myFish is ["angel", "clown", "drum", "sturgeon"]

2번 인덱스에서 한 개 요소 제거하고 “trumpet” 추가

var myFish = ['angel', 'clown', 'drum', 'sturgeon'];
var removed = myFish.splice(2, 1, 'trumpet');

// myFish is ["angel", "clown", "trumpet", "sturgeon"]
// removed is ["drum"]

0번 인덱스에서 두 개 요소 제거하고 “parrot”, “anemone”, “blue” 추가

var myFish = ['angel', 'clown', 'trumpet', 'sturgeon'];
var removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue');

// myFish is ["parrot", "anemone", "blue", "trumpet", "sturgeon"]
// removed is ["angel", "clown"]

2번 인덱스에서 두 개 요소 제거

var myFish = ['parrot', 'anemone', 'blue', 'trumpet', 'sturgeon'];
var removed = myFish.splice(myFish.length - 3, 2);

// myFish is ["parrot", "anemone", "sturgeon"]
// removed is ["blue", "trumpet"]

-2번 인덱스에서 한 개 요소 제거

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(-2, 1);

// myFish is ["angel", "clown", "sturgeon"]
// removed is ["mandarin"]

2번 인덱스를 포함해서 이후의 모든 요소 제거

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2);

// myFish is ["angel", "clown"]
// removed is ["mandarin", "sturgeon"]​

 

 

[REFERENCE]

 

Leave a Reply

error: Content is protected !!