模仿Java的ArrayList.remove(o)的函数

时间:2012-04-26 14:59:00

标签: java javascript arraylist

如何实现与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()

2 个答案:

答案 0 :(得分:4)

IE7及以下版本不支持

Array.prototype.indexOf。所以你需要 shim 这个方法,比如

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);
    }
};

答案 1 :(得分:1)

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

var arr = {'x': somval, 'y': someval2 ...}
delete arr.x;