0

我怎样才能实现一个与 做同样事情的函数ArrayList.remove(o)

我最接近的东西是

Array.prototype.remove = function(o) {
    var index = this.indexOf(o);
    if(index == -1) {
        return;
    }
    return this.splice(index, index);
}

但是它在第二行引发错误,声称indexOf(o)不存在。( cannot find function indexOf())

4

2 回答 2

4

Array.prototype.indexOfIE7及以下不支持。因此,您之前还需要填充该方法,例如

Array.prototype.indexOf = Array.prototype.indexOf || function( search ) {
    for(var i = 0, len = this.length; i < len; i++) {
        if( this[ i ] === search ) {
            return i;
        }
    }
    return -1;
};

(简化示例)

此外,您的调用.splice()是错误的,第二个参数是您要删除的元素的长度,它应该是1.

Array.prototype.remove = function(o) {
    var index = this.indexOf(o);
    if(~index) {
        this.splice(index, 1);
    }
};
于 2012-04-26T15:04:44.967 回答
1

另一个想法是使用“关联数组”,也就是具有名称值对的对象文字,并使用适用于所有现代浏览器的删除运算符。

var arr = {'x': somval, 'y': someval2 ...}
delete arr.x;
于 2012-04-26T15:09:55.777 回答