2014-12-24 6 views
0

여기에서 json 객체에서 특정 Array [2]를 삭제하려고합니다. 하지만 콘솔에서 볼 수 있습니다 - 배열 값을 삭제 된 있지만 삭제 된 후 jquery $.each 사용하여 체크했을 때 idx 남아 있습니다. 그럼, 올바른 방법으로 전체 배열 객체를 삭제하는 방법은?json 객체에서 json Array 제거

var obj = { 
 
    equipments:'first', 
 
\t messages:['msg1','msg2','msg3'], \t 
 
} 
 

 
console.log(obj); 
 
$.each(obj.messages, function (idx, obj) { 
 
alert("before deleted index value" +idx); 
 
}); 
 

 
obj1 = obj; 
 

 
if(obj1["equipments"] == 'first') { 
 
     delete obj1.messages[2]; 
 
    } 
 
    
 
console.log(obj1); 
 
$.each(obj1.messages, function (idx, obj1) { 
 
alert("after deleted but index remains same" +idx); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>

+0

여기와 같습니다 - http://stackoverflow.com/questions/500606/javascript-array-delete-elements –

답변

1

를, 그것은 undefined에 elment을 설정하지만 배열의 길이는 동일하게 유지됩니다.

그래서 당신은 splice()을 사용하지만 당신은 당신이 obj1에 무엇 이건 obj1obj에 대한 참조이기 때문에 또한 obj에 일어날 것을 깨닫게해야합니다. 당신이 할 때 사본이 아닙니다 obj1=obj

+0

splice()는 어떻게 사용할 수 있습니까? 간단히 설명해 주시겠습니까? 그것은 도움이 될 것입니다 –

+1

'obj1.messages.splice (2, 1);'첫 번째 인자는 시작 인덱스이고, 두 번째 인자는 제거 할 원소의 수입니다. – charlietfl

+0

은 하나의 객체에서 제거하는 것에 대해 다른 것을 의미합니다. : //jsfiddle.net/rs61z9gz/ – charlietfl

1

사용 splice :

obj1.messages.splice(2, 1); // at index 2, delete 1 element, inserting nothing 
+0

당신의 작품을 감사하십시오! 그러나 나는 어떤 색인을 삭제해야하는지 정확히 알지 못합니다. 나는 비교를 기반으로 값을 비교하는 것처럼, 특정 배열 인덱스를 가져올 것입니다. 그런 다음 배열을 삭제합니다. 여기서 인덱스 2 삭제 1 요소를 사용하고 있습니다. 삭제 1은 무엇을 의미합니까? 인덱스가 2라는 것을 알고있다 –

+0

'splice (2, 3, "f", "g")'를 사용하면 인덱스 2, 3, 4 (세 개)의 요소가 삭제되고, '및''g ''를 인덱스 2와 3에 각각 나타냅니다. 또한 우리는 삭제 된 요소보다 적은 요소 하나를 삽입 했으므로 다음 요소의 모든 인덱스를 -1로 변경합니다. 어떤 인덱스를 삭제해야하는지 모른다면, 인덱스가 필요한'delete obj1.messages [2]'메소드로 어떻게 관리 했습니까? 색인을 찾아 세상을 구하십시오. – Amadan

+0

도와 주셔서 감사합니다. 당신을위한 명성과 @ charlietfl .. 시간을 기반으로, 나는 그의 대답을 확인하고 있습니다. 그 죄송합니다! 다시 한번 감사드립니다! –

1

현재의 접근 방식과 같이 사용해보십시오 :

 $.each(obj1.messages, function (idx, obj1) { 
      if(typeof(obj1) != 'undefined')// log if the type of obj1 is not undefined because after delete the value will become undefined 
     console.log("after deleted but index remains same" +idx); 
     }); 

당신이 그것을 것이 경우에 스플 라이스을 사용할 수 있습니다 이 같은 인덱스 그것 자체 제거 : 당신이 그 인덱스를 제거하지 않습니다 배열에 delete를 사용하는 경우

if(obj1["equipments"] == 'first') { 
      obj1.messages.splice(2, 1); 
      } 

    $.each(obj1.messages, function (idx, obj1) { 
     console.log("after deleted index " +idx); 
     }); 
+0

작업에 감사드립니다. –