繁体   English   中英

从json对象中删除json数组

[英]Removing json Array from json object

在这里,我要从json对象中删除特定的数组[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> 

使用splice

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

对于您当前的方法,请尝试这样使用:

        $.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);
        });

您可以在这种情况下使用splice ,它将删除自身的索引,如下所示:

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

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

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

因此,您将使用splice()但您还需要意识到对obj1所做的任何事情都会发生在obj因为obj1是对obj的引用。 当您执行obj1=obj时,它不是副本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM