这里,我将从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>
答案 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
,因为obj1
是obj
的引用1}}。执行obj1=obj