如何删除对象数组中的对象:jquery?

时间:2012-08-15 12:45:21

标签: javascript jquery arrays

我很困惑我试图使用jquery删除对象数组中的对象这里是我的代码,jsFiddle

var x = new Array() ; 
var y = {} ; 
y.name = 'myName' ; 
y.age = 28 ; 
y.phone = 27895556 ; 
y.info = [{name:'x' ,age:58} ,{name:'y' , age:15}]
x.push(y) ;

 $.each(x , function(index,value) {
        $.each(value.info , function(i,v){
            if(v.name == 'x'){
            this.splice(i,1) ; 
         }

      });
  }); 

我试图通过if ='x'告诉v.name条件移除对象但是我得到了这个error 未捕获的TypeError:对象#没有方法'剪接'

更新我需要y.info = [{name:'x' ,age:58} ,{name:'y' , age:15}]之后的splice()

知道我做错了什么谢谢

1 个答案:

答案 0 :(得分:5)

如果您只是想删除包含值{name: 'x'}的内部数组元素,那么您想要splice的数组是外部循环的value.info

$.each(x, function(index, value) {
    $.each(value.info, function(i, v) {
        if (v.name === 'x') {
            value.info.splice(i, 1) ; 
        }
    });
});

但是,此代码遇到的问题是,在使用$.each进行迭代时,不应修改数组的长度。这个替代代码修复了这个问题:

$.each(x, function(index, value) {
    var info = value.info;
    for (var i = 0; i < info.length; ) {
        if (info[i].name === 'x') {
            info.splice(i, 1);
        } else {
            ++i;
        }
    }
});