有没有从 JavaScript 数组中删除项的方法?
给定一个数组:
var ary = ['three', 'seven', 'eleven'];
我想做的事情如下:
removeItem('seven', ary);
我查看了splice()
但只删除了位置编号,而我需要通过其值删除项目。
您可以像这样使用indexOf
方法 :
var index = array.indexOf(item);
if (index !== -1) array.splice(index, 1);
注意 : 您需要为 IE8 及以下版本填充它
var array = [1,2,3,4]
var item = 3
var index = array.indexOf(item);
if (index !== -1) array.splice(index, 1);
console.log(array)
如果不允许添加到本机原型,则可以是全局函数或自定义对象的方法。它会从数组中删除与任何参数匹配的所有项。
Array.prototype.remove = function() {
var what, a = arguments, L = a.length, ax;
while (L && this.length) {
what = a[--L];
while ((ax = this.indexOf(what)) !== -1) {
this.splice(ax, 1);
}
}
return this;
};
var ary = ['three', 'seven', 'eleven'];
ary.remove('seven');
/* returned value: (Array)
three,eleven
*/
使其成为全球 -
function removeA(arr) {
var what, a = arguments, L = a.length, ax;
while (L > 1 && arr.length) {
what = a[--L];
while ((ax= arr.indexOf(what)) !== -1) {
arr.splice(ax, 1);
}
}
return arr;
}
var ary = ['three', 'seven', 'eleven'];
removeA(ary, 'seven');
/* returned value: (Array)
three,eleven
*/
并照顾 IE8 及以下 -
if(!Array.prototype.indexOf) {
Array.prototype.indexOf = function(what, i) {
i = i || 0;
var L = this.length;
while (i < L) {
if(this[i] === what) return i;
++i;
}
return -1;
};
}
单行将会这样做,
var ary = ['three', 'seven', 'eleven'];
// Remove item 'seven' from array
var filteredAry = ary.filter(function(e) { return e !== 'seven' })
//=> ["three", "eleven"]
// In ECMA6 (arrow function syntax):
var filteredAry = ary.filter(e => e !== 'seven')
这使用了 JS 中的过滤器功能。 IE9 及以上版本支持它。
它的作用(来自 doc 链接)
filter()为数组中的每个元素调用一次提供的回调函数,并构造一个包含所有值的新数组,其中回调返回一个强制为 true 的值。仅为已分配值的数组的索引调用回调; 对于已删除的索引或从未分配过值的索引,不会调用它。不会通过回调测试的数组元素被简单地跳过,并且不包含在新数组中。
所以基本上,这与for (var key in ary) { ... }
解决方案中的所有其他解决方案相同,只是从 IE6 开始支持for in
构造。
基本上,过滤器是一种方便的方法,与构造中的for in
(AFAIK)相比,看起来更好(并且是可链接的)。