javascript - remove array element on condition
我想知道如何在JavaScript中实现一个方法,它删除了一个数组中清除某个特定条件的所有元素。(最好不使用jquery)
前任。
1 2 3 4 | ar = [ 1, 2, 3, 4 ]; ar.removeIf( function(item, idx) { return item > 3; }); |
上面将遍历数组中的每个项,并删除条件(在示例中,项>3)中
我刚开始使用JavaScript,我想知道是否有人知道一种简单有效的方法来完成这项工作。
--更新——
如果该条件也可以用于对象属性,那也将是非常好的。
前任。
1 2 3 4 | ar = [ {num:1, str:"a"}, {num:2, str:"b"}, {num:3, str:"c"} ]; ar.removeIf( function(item, idx) { return item.str =="c"; }); |
如果
--UpDea2——
如果索引条件也可以工作,那就太好了。
前任。
1 2 3 4 | ar = [ {num:1, str:"a"}, {num:2, str:"b"}, {num:3, str:"c"} ]; ar.removeIf( function(item, idx) { return idx == 2; }); |
可以使用数组过滤方法。
代码如下:
1 2 3 4 | ar = [ 1, 2, 3, 4 ]; ar = ar.filter( function(item) { return !(item > 3); }); |
如果
1 2 3 4 5 6 7 8 9 10 11 | 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,每一位都有助于:
1 2 3 4 5 6 7 8 | Array.prototype.removeIf = function(callback) { var i = this.length; while (i--) { if (callback(this[i], i)) { this.splice(i, 1); } } }; |
这样就不必担心更新
您可以使用
1 2 3 | ar.filter(function(item, idx) { return item <= 3; }); |
如果条件也可以用于对象属性,那么只需编写以下示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | var ar = [ {num:1, str:"a <hr> <p> You can use lodash.remove </p> [cc lang="javascript"]var array = [1, 2, 3, 4]; var evens = _.remove(array, function(n) { return n % 2 == 0; }); console.log(array); // => [1, 3] console.log(evens); // => [2, 4] |
我喜欢这些问题,只是和我不同的版本…:)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Array.prototype.removeIf = function(expression) { var res = []; for(var idx=0; idx<this.length; idx++) { var currentItem = this[idx]; if(!expression(currentItem)) { res.push(currentItem); } } return res; } ar = [ 1, 2, 3, 4 ]; var result = ar.removeIf(expCallBack); console.log(result); function expCallBack(item) { return item > 3; } |