如何从值中删除数组中的项目?

var ary = ['three', 'seven', 'eleven'];
removeItem('seven', ary);

答案

您可以像这样使用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 中的filter函数。在 IE9 及更高版本中受支持。

它的作用(来自 doc 链接)

filter()对数组中的每个元素调用一次提供的回调函数,并构造一个所有值的新数组,为此,回调返回一个强制为 true 的值。仅对具有指定值的数组索引调用回调;对于已删除或从未分配值的索引,不会调用它。未通过回调测试的数组元素将被跳过,并且不包含在新数组中。

因此,基本上,这与所有其他for (var key in ary) { ... }解决方案相同,除了从 IE6 开始支持for in构造。

基本上,过滤器是一种方便的方法,与for in构造(AFAIK)相比,它看起来更好(并且可链接)。

您可以使用underscore.js 。这确实使事情变得简单。

例如,与此:

var result = _.without(['three','seven','eleven'], 'seven');

result将是['three','eleven']

在您的情况下,您必须编写的代码是:

ary = _.without(ary, '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');

您可以通过以下两种方式进行操作:

var arr = ["1","2","3","4"] // we wanna delete number "3"

第一:

arr.indexOf('3') !== -1 && arr.splice(arr.indexOf('3'), 1)

第二(ES6):

arr = arr.filter(e => e !== '3')

这是使用 jQuery 的inArray 函数的版本:

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

if(index!=-1){

   array.splice(index, 1);
}

最简单的解决方案是:

array - 用于删除某些元素的数组 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)
}

只是

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