有没有一种方法可以从 JavaScript 数组中移除一个元素?
给定一个数组:
var ary = ['three', 'seven', 'eleven'];
我想要做类似这样的事情:
removeItem('seven', ary);
我研究了splice()
,但那只能按位置号删除,我需要一种可以按值删除项目的方法。
有没有一种方法可以从 JavaScript 数组中移除一个元素?
给定一个数组:
var ary = ['three', 'seven', 'eleven'];
我想要做类似这样的事情:
removeItem('seven', ary);
我研究了splice()
,但那只能按位置号删除,我需要一种可以按值删除项目的方法。
$.inArray
代替indexOf
,它在各种浏览器上都兼容。 - Tamás Papvar arr = ['three', 'seven', 'eleven'];
// Remove item 'seven' from array
var filteredArray = arr.filter(function(e) { return e !== 'seven' })
//=> ["three", "eleven"]
// In ECMA6 (arrow function syntax):
var filteredArray = arr.filter(e => e !== 'seven')
这个使用了JS中的filter函数。它支持IE9及以上版本。
它的作用(来自文档链接):
filter()函数对数组中的每个元素调用一次提供的回调函数,并构造一个由所有导致回调返回一个强制转换为true值的值组成的新数组。回调仅为具有分配值的数组索引调用;它不为已删除或从未分配值的索引调用。没有通过回调测试的数组元素将被简单地跳过,并且不包含在新数组中。
因此,基本上,这与所有其他for (var key in ary) { ... }
解决方案相同,只是for in
结构从IE6开始受支持。
基本上,filter是一个更加美观(可以链式调用)方便的方法,与for in
结构相比(据我所知)。
&&
可以添加要删除的任意数量的值。 - user1299518routes = routes.filter(function (e) { return e.id !== id });
- quilkin如果您无法添加到本地原型中,则此函数可以是全局函数或自定义对象的方法。它会从数组中删除与任何参数匹配的所有项。
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;
};
}
Object.defineProperty(Array.prototype, "remove", {enumerable : false});
- naXa stands with Ukrainevar result = _.without(['three','seven','eleven'], 'seven');
并且 result
将会是 ['three','eleven']
。
在您的情况下,您需要编写的代码是:
ary = _.without(ary, 'seven')
它减少了您编写的代码。
_.pull
。 - undefined你可以用以下两种方式来实现:
const arr = ['1', '2', '3', '4'] // we wanna delete number "3"
第一种方法:
arr.indexOf('3') !== -1 && arr.splice(arr.indexOf('3'), 1)
第二种方法(ES6)特别是不会改变原始数据:
const newArr = arr.filter(e => e !== '3')
var ary = ['three', 'seven', 'eleven'];
var index = ary.indexOf('seven'); // get index if value found otherwise -1
if (index > -1) { //if found
ary.splice(index, 1);
}
一行解决方案
var ary = ['three', 'seven', 'eleven'];
filteredArr = ary.filter(function(v) { return v !== 'seven' })
// Or using ECMA6:
filteredArr = ary.filter(v => v !== 'seven')
看看这种方式:
for(var i in array){
if(array[i]=='seven'){
array.splice(i,1);
break;
}
}
在一个函数中:
function removeItem(array, item){
for(var i in array){
if(array[i]==item){
array.splice(i,1);
break;
}
}
}
removeItem(array, 'seven');
removeItem(array, 'seven, eight')
但它没有起作用。 - HiDayurie Davearray - 用于删除某些元素值的数组 valueForRemove; valueForRemove - 要删除的元素。
array.filter(arrayItem => !array.includes(valueForRemove));
更简单:
array.filter(arrayItem => arrayItem !== valueForRemove);
不太漂亮,但能正常工作:
array.filter(arrayItem => array.indexOf(arrayItem) != array.indexOf(valueForRemove))
不太好看,但能用:
while(array.indexOf(valueForRemove) !== -1) {
array.splice(array.indexOf(valueForRemove), 1)
}
P.S. filter() 方法根据所提供的函数实现的测试,创建一个新数组并筛选所有通过测试的元素。请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
newArray = array.filter...
然后:array = newArray
,该项就从 array
中消失了。 - Preston您可以创建自己的方法,通过传递数组和要删除的值:
function removeItem(arr, item){
return arr.filter(f => f !== item)
}
然后您可以这样调用:
ary = removeItem(ary, 'seven');
这里有一个使用jQuery的inArray函数的版本:
var index = $.inArray(item, array);
if (index != -1) {
array.splice(index, 1);
}
Array.filter()
翻译为 "数组过滤",它是 JavaScript 中的一个数组方法。该方法可用于创建一个新数组,其中包含原始数组中满足特定条件的所有元素。使用该方法需要提供一个回调函数,该函数接受三个参数:当前元素、元素索引和数组本身。回调函数应返回一个布尔值,指示当前元素是否应包含在新数组中。 - Eric Hodonsky