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

给定一个数组:

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

我想做的事情是:

removeItem('seven', ary);

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


当前回答

这样看看:

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');

其他回答

let arr = [5, 15, 25, 30, 35];
console.log(arr); //result [5, 15, 25, 30, 35]
let index = arr.indexOf(30);

if (index > -1) {
   arr.splice(index, 1);
}
console.log(arr); //result [5, 15, 25, 35]

你可以像这样使用indexOf方法:

var index = array.indexOf(item);
if (index !== -1) {
  array.splice(index, 1);
}

注意:对于IE8及以下版本,您需要对其进行填充

Var数组= [1,2,3,4] Var项= 3 var index = array.indexOf(item); 数组中。拼接(指数(1); console.log(数组)

非破坏性拆卸:

function removeArrayValue(array, value)
{
    var thisArray = array.slice(0); // copy the array so method is non-destructive

    var idx = thisArray.indexOf(value); // initialise idx

    while(idx != -1)
    {
        thisArray.splice(idx, 1); // chop out element at idx

        idx = thisArray.indexOf(value); // look for next ocurrence of 'value'
    }

    return thisArray;
}

请不要使用带有delete的变体-它会在数组中留下一个洞,因为它不会在删除的项之后重新索引元素。

> Array.prototype.remove=function(v){
...     delete this[this.indexOf(v)]
... };
[Function]
> var myarray=["3","24","55","2"];
undefined
> myarray.remove("55");
undefined
> myarray
[ '3', '24', , '2' ]

indexOf是一个选项,但它的实现基本上是在整个数组中搜索值,因此执行时间随着数组大小的增加而增加。(所以我猜每个浏览器都是这样,我只检查了Firefox)。

我没有IE6可以检查,但我敢打赌,你可以在几乎任何客户端机器上以这种方式每秒检查至少一百万个数组项。如果[数组大小]*[每秒搜索次数]可能超过一百万,您应该考虑不同的实现。

基本上你可以使用一个对象为你的数组创建一个索引,如下所示:

var index={'three':0, 'seven':1, 'eleven':2};

任何正常的JavaScript环境都会为这些对象创建一个可搜索的索引,这样无论对象有多少属性,您都可以快速地将键转换为值。

这只是基本的方法,根据你的需要,你可以组合几个对象和/或数组,使相同的数据快速搜索不同的属性。如果您指定了确切的需求,我可以建议更具体的数据结构。