javascript从数组中删除项

javascript从数组中删除项,javascript,arrays,function,object,Javascript,Arrays,Function,Object,我有一个js对象 var myClass = Class.extend({ _innerArr: [], add: function( id, url ){ this._innerArr.push([id, url]); }, delete: function( id ){ $( this._innerArr ).each(function( index ){ if ( $( this )[0]==id ){

我有一个js对象

var myClass = Class.extend({
    _innerArr: [],
    add: function( id, url ){
        this._innerArr.push([id, url]);
    },
    delete: function( id ){
        $( this._innerArr ).each(function( index ){
            if ( $( this )[0]==id ){
                 this._innerArr.splice( index, 1); // Doesn't work!!! Uncaught TypeError: Cannot call method 'splice' of undefined 
            }
        });
    }
});
但是,如果代码更改为:

 var globalArr;

 var myClass = Class.extend({
    _innerArr: [],
    add: function( id, url ){
        this._innerArr.push([id, url]);
    },
    delete: function( id ){
        globalArr = this._innerArr;
        $( this._innerArr ).each(function( index ){
            if ( $( this )[0]==id ){
                 globalArr.splice( index, 1); // Work!!! 
            }
        });

    }
});

为什么这不起作用?我不想在我的项目中使用添加变量。另一种方法是…

当使用jQuery的
方法时,each()
方法调用函数时,使用
this
作为数组的当前值。您在执行
$(this)[0]
时正在使用它。(
$(这个)[0]
可能没有必要。)

您不需要为此创建全局变量,但也可以在
delete
函数中设置一个作用域变量


或者,您可以使用
for
循环,而不是jQuery的
each()
。这也快了一点。

当使用jQuery的
时。each()
方法调用函数时,将
this
作为数组的当前值。您在执行
$(this)[0]
时正在使用它。(
$(这个)[0]
可能没有必要。)

您不需要为此创建全局变量,但也可以在
delete
函数中设置一个作用域变量


或者,您可以使用
for
循环,而不是jQuery的
each()
。这也快了一点。

当使用jQuery的
时。each()
方法调用函数时,将
this
作为数组的当前值。您在执行
$(this)[0]
时正在使用它。(
$(这个)[0]
可能没有必要。)

您不需要为此创建全局变量,但也可以在
delete
函数中设置一个作用域变量


或者,您可以使用
for
循环,而不是jQuery的
each()
。这也快了一点。

当使用jQuery的
时。each()
方法调用函数时,将
this
作为数组的当前值。您在执行
$(this)[0]
时正在使用它。(
$(这个)[0]
可能没有必要。)

您不需要为此创建全局变量,但也可以在
delete
函数中设置一个作用域变量


或者,您可以使用
for
循环,而不是jQuery的
each()
。这也快了一点。

之所以会发生这种情况,是因为
this
的范围在
回调中发生了变化;这是一个众所周知的现象,通常涉及将
保存在函数调用之外的另一个变量中

您可以使用
jQuery.grep()
,而不是自己拼接东西:


之所以会发生这种情况,是因为
this
的范围在
回调中发生了变化;这是一个众所周知的现象,通常涉及将
保存在函数调用之外的另一个变量中

您可以使用
jQuery.grep()
,而不是自己拼接东西:


之所以会发生这种情况,是因为
this
的范围在
回调中发生了变化;这是一个众所周知的现象,通常涉及将
保存在函数调用之外的另一个变量中

您可以使用
jQuery.grep()
,而不是自己拼接东西:


之所以会发生这种情况,是因为
this
的范围在
回调中发生了变化;这是一个众所周知的现象,通常涉及将
保存在函数调用之外的另一个变量中

您可以使用
jQuery.grep()
,而不是自己拼接东西:


使用普通循环,而不是
each
var
移动到
delete
函数中就足够了,您不需要它完全全局使用普通循环,而不是
each
var
移动到
delete
函数中就足够了,您不需要它完全全局使用普通循环,不是
each
var
移动到
delete
函数中就足够了,您不需要它完全全局使用普通循环,不是
each
var
移动到
delete
函数中就足够了,您不需要它完全全局
this._innerArr = $.grep(this._innerArr, function(element) {
    return element[0] != id;
});