在条件下移除数组元素

我想知道如何去实现一个方法在JavaScript中,删除清除一定条件的数组的所有元素。 (最好不使用jQuery)

防爆。

ar = [ 1, 2, 3, 4 ];
ar.removeIf( function(item, idx) {
    return item > 3;
});

上面的代码会遍历数组中的每个项目,并删除所有那些return true的条件(例如,项目> 3)。

我刚刚开始使用JavaScript,并想知道是否有人知道一个简短有效的方法来完成这项工作。

- 更新 -

如果条件也可以用于对象属性,那也是很好的。

防爆。

ar = [ {num:1, str:"a"}, {num:2, str:"b"}, {num:3, str:"c"} ];
ar.removeIf( function(item, idx) {
    return item.str == "c";
});

如果项目将被删除,如果item.str == "c"

- update2 -

如果指数条件也可以工作,那将会很好。

防爆。

ar = [ {num:1, str:"a"}, {num:2, str:"b"}, {num:3, str:"c"} ];
ar.removeIf( function(item, idx) {
    return idx == 2;
});

如果filter不适用于您,您可以将自己的方法添加到Array ,执行类似的操作。

Array.prototype.removeIf = function(callback) {
    var i = 0;
    while (i < this.length) {
        if (callback(this[i], i)) {
            this.splice(i, 1);
        }
        else {
            ++i;
        }
    }
};

对我来说,这是JavaScript最酷的功能之一。 伊恩指出了一个更有效的方法来做同样的事情。 考虑到它是JavaScript,每一点都有助于:

Array.prototype.removeIf = function(callback) {
    var i = this.length;
    while (i--) {
        if (callback(this[i], i)) {
            this.splice(i, 1);
        }
    }
};

这避免了甚至担心更新length或捕捉下一个项目的需要,因为您在工作中向左而不是右转。


您可以使用数组过滤器方法。

代码如下所示:

ar = [ 1, 2, 3, 4 ];
ar = ar.filter( function(item) {
    return !(item > 3);
});

你可以使用Array.filter() ,这相反:

ar.filter(function(item, idx) {
    return item <= 3;
});
链接地址: http://www.djcxy.com/p/19263.html

上一篇: remove array element on condition

下一篇: Remove duplicate values from JS array