是否有从JavaScript数组中删除项的方法?

给定一个数组:

var ary = ['three', 'seven', 'eleven'];

我想做的事情是:

removeItem('seven', ary);

我已经查看了splice(),但它只删除了位置号,而我需要一些东西来删除其值的项目。


当前回答

你可以使用Lodash _来实现这一点。删除功能。

Var array = [' 3 ', ' 7 ', ' 11 ']; Var even = _。删除(数组,函数(e) { 返回e !== 'seven'; }); console.log(均等的); <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script> .js

其他回答

如果你有唯一的值,顺序不重要,使用Set,它有delete():

var mySet = new Set(['three', 'seven', 'eleven']);
mySet.delete('seven'); // Returns true, successfully removed    
[...mySet];            // Returns ['three', 'eleven']

你可以使用Lodash _来实现这一点。删除功能。

Var array = [' 3 ', ' 7 ', ' 11 ']; Var even = _。删除(数组,函数(e) { 返回e !== 'seven'; }); console.log(均等的); <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script> .js

我尝试使用上面jbaron中的函数方法,但发现我需要保持原始数组完整以供以后使用,并创建一个像这样的新数组:

var newArray = referenceArray;

显然是通过引用而不是值创建的,因为当我从newArray中删除一个元素时,referenceArray也删除了它。所以我决定每次创建一个新数组,就像这样:

function newArrRemoveItem(array, item, newArray){
    for(var i = 0; i < array.length; i++) {
        if(array[i]!=item){
            newArray.push(array[i]);
        }
    }
}

然后我在另一个函数中这样使用它:

var vesselID = record.get('VesselID');
var otherVessels = new Array();
newArrRemoveItem(vesselArr,vesselID,otherVessels);

现在,vesselArr保持完整,而每次我执行上述代码时,othervessel数组都包含了除最新的vesselID元素之外的所有元素。

从数组中删除所有匹配的元素(而不仅仅是第一个,这似乎是这里最常见的答案):

while ($.inArray(item, array) > -1) {
    array.splice( $.inArray(item, array), 1 );
}

我使用jQuery来完成这些繁重的工作,但是如果您想要本地化,您就可以理解了。

你可以使用without或pull from Lodash:

const _ = require('lodash');
_.without([1, 2, 3, 2], 2); // -> [1, 3]