在条件下移除数组元素
我想知道如何去实现一个方法在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