如何从数组中删除一个特定值? 类似 :

array.remove(value);

我必须使用核心核心核心JavaScript。 不允许框架 。


当前回答

您永远不应该根据功能性编程模式改变您的阵列。 您可以创建一个新的阵列, 而不引用您想要更改的数据 ECMAScript 6 方法 。filter;

var myArray = [1, 2, 3, 4, 5, 6];

假设您想要删除5从数组中,您可以简单地这样做:

myArray = myArray.filter(value => value !== 5);

这将给您一个没有您想要删除的值的新数组。 因此结果将是 :

 [1, 2, 3, 4, 6]; // 5 has been removed from this array

关于进一步理解,请阅读MDN文件:Array.过滤器.

其他回答

一个非常天真的执行情况如下:

Array.prototype.remove = function(data) {
    const dataIdx = this.indexOf(data)
    if(dataIdx >= 0) {
        this.splice(dataIdx ,1);
    }
    return this.length;
}

let a = [1,2,3];
// This will change arr a to [1, 3]
a.remove(2);

我从函数返回数组的长度以遵守其他方法,例如Array.prototype.push().

更新 :只有当您无法使用 ECMASCript 2015 (前称ES6) 时,才会推荐使用这种方法。 如果您可以使用这种方法, 其它答案则提供更清晰的落实。


这个格子在这里将解决您的问题, 并删除所有出现参数的情况, 而不是仅一个( 或指定值) 。

Array.prototype.destroy = function(obj){
    // Return null if no objects were found and removed
    var destroyed = null;

    for(var i = 0; i < this.length; i++){

        // Use while-loop to find adjacent equal objects
        while(this[i] === obj){

            // Remove this[i] and store it within destroyed
            destroyed = this.splice(i, 1)[0];
        }
    }

    return destroyed;
}

用法 :

var x = [1, 2, 3, 3, true, false, undefined, false];

x.destroy(3);         // => 3
x.destroy(false);     // => false
x;                    // => [1, 2, true, undefined]

x.destroy(true);      // => true
x.destroy(undefined); // => undefined
x;                    // => [1, 2]

x.destroy(3);         // => null
x;                    // => [1, 2]

我不知道你是怎么想的array.remove(int)行为。我可以想到三种可能性 你可能想要。

在索引中删除数组的元素i:

array.splice(i, 1);

如果您想要删除带有值的每个元素number从数组 :

for (var i = array.length - 1; i >= 0; i--) {
 if (array[i] === number) {
  array.splice(i, 1);
 }
}

如果您只想在索引中生成元素i不再存在,但你不希望其它元素的索引改变:

delete array[i];

通常比较好的是 创造一个新的阵列filter函数。

let array = [1,2,3,4];
array = array.filter(i => i !== 4); // [1,2,3]

这还提高了易读性IMHO。slice虽然它知道有时你应该去。

我喜欢这个组合的版本, 以其值来去除元素, 使用$.inArray:

$(document).ready(function(){
    var arr = ["C#","Ruby","PHP","C","C++"];
    var itemtoRemove = "PHP";
    arr.splice($.inArray(itemtoRemove, arr),1);
});