javascript从数组中删除项
我有一个js对象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 ){
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;
});