0

私は混乱して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) ; 
         }

      });
  }); 

= 'x'ifでオブジェクトを削除する条件を伝えようとしましたが、 Uncaught TypeError: Object # has no method 'splice' が発生しますv.nameerror

更新私は次のようなものが必要です: y.info = [{name:'x' ,age:58} ,{name:'y' , age:15}]splice()

私が間違っていることを考えてくださいありがとう

4

1 に答える 1

5

値を含む内側の配列要素を削除しようとしているだけの場合、必要な{name: 'x'}配列splicevalue.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;
        }
    }
});
于 2012-08-15T12:50:08.260 に答える