从json对象中删除json数组

时间:2014-12-24 05:28:33

标签: javascript jquery arrays json

这里,我将从json对象中删除特定的Array [2]。但是,我在控制台中看到的是 - 数组值已删除但在删除后在jquery中使用$.each检查时它仍保留在idx中。那么,如何以正确的方式删除整个数组对象?

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

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>

3 个答案:

答案 0 :(得分:1)

使用splice

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

答案 1 :(得分: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);
        });

您可以使用拼接,在这种情况下,它会自动删除索引:

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

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

答案 2 :(得分:1)

在数组上使用delete时,它不会删除该索引,它会将元素设置为undefined,但数组长度保持不变。

所以你会使用splice(),但你也需要意识到,无论你对obj1做什么都会发生在obj,因为obj1obj的引用1}}。执行obj1=obj

时,它不是副本