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

array.remove(value);

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


当前回答

如果数组含有重复的值,而您想要删除目标的所有发生点, 那么这就是前进的道路...

let data = [2, 5, 9, 2, 8, 5, 9, 5];
let target = 5;
data = data.filter(da => da !== target);

注: - 过滤器不会改变原始数组;相反它会创建一个新的数组。

所以再次分配很重要。

这又引出了另一个问题,你无法制造变异的Const。它应该可以或可以。

其他回答

删除单个元素

function removeSingle(array, element) {
    const index = array.indexOf(element)
    if (index >= 0) {
        array.splice(index, 1)
    }
}

删除多个元素, 位置内

这对于确保算法在O(N)时间运行更为复杂。

function removeAll(array, element) {
    let newLength = 0
    for (const elem of array) {
        if (elem !== number) {
            array[newLength++] = elem
        }
    }
    array.length = newLength
}

删除多个元素,创建新对象

array.filter(elem => elem !== number)

您可以使用 JavaScript 的标准 __ proto__ 来定义此函数。例如,

让数据 = [;] 数据 .__proto__.remove = (n) { {数据 = 数据 : blockMap ((v) ) { { 返回 v ? v : [] n? v ; 数据 = [1, 2, 3] ; 数据 = [1, 2, 3] ; 数据.remove (2); 控制台.log(数据); / / [1,3] 数据 = [a', b', c'] ; 数据.remove ('b'); 控制台.log(数据); // [a, c]

您可以使用复数来从数组中删除对象或值。

让我们考虑一个长度为5的行距, 值为10,20,30,40,50, 我想从中去掉30的值。

var 数组 = [10,20,30,40,50];如果 (数组. indexof(30) > -1) {数组.spice( 数组. indexof(30), 1);} 控制台. log( 数组); / / [10,20, 40,50]

您可以扩展数组对象以定义自定义的删除函数如下:

let let = [1, 2,4,4,4,5,5,45,9;] 数.delete = 函数(价值) { var indexof Target = this.indexof (value) =.indexof(value) = this.if(indexoftaget = = = = = = = = = = y= = y,4,4,4,5,4,459; 数. 数.delet = 函数(val = val indexof Talget = this. indexeof(valent) = = = = = indexget =.indexof = = =. { = indexexuf(val =) { = = indexete = = / / / imme eleteletelete (1) // / / / / 预期输出= / / / tradestrayf delett 删除 2,4,4,4,4,4,4,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,9/ /

有许多方法可以从 JavaScript 阵列中去除一个特定元素。 下面是我研究中可以找到的五种最佳方法。

1. 直接使用“ splice () ” 方法

在以下代码段,从数组中删除特定预定位置的元素。

语法: 数组_ name.spice( begin_ index, 数字_ elements_ remove) ; 应用程序 :

var arr = [1、2、3、4、5、6、7、8、9、10]; 控制台.log ("原件阵列: "+arr " ; var remote = ar.spice(4、2); 控制台.log ("修改后的阵列: "+arr " ; 控制台.log ("元素删除: "+删除 " );

2. 使用“ splice() () ” 方法用“ valice () ” 方法用“ value () ” 删除元素

在以下代码段中,我们可以使用循环内的条件,删除所有等于预先确定值(前:所有元素等于值6)的所有元素。

var arr = [1, 2, 6, 3, 2, 6, 7, 8, 8, 9, 10] 控制台.log ("原件阵列: "+arr”; 对于 (var i = 0; i < arr. 长度; i++) { { {var remove = rr.spice(i, 1); i-; }} 控制台. log ("修改阵列: "+arr " ); / / 6 被移除控制台. log ("重新删除的元素: "+删除 ");

3. 使用“过滤器()”方法删除按值选择的元素

与使用“ spice() () ” 方法的执行类似, 但它没有改变现有的数组, 而是创造了新的元素阵列, 从而删除了不想要的元素 。

var 数组 = [1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10] ; var 过滤 = 数组. filter( 函数( 值, 索引, rr) { 返回值 = 6 ; } ; 控制台. log ("原件数组 : "+array" ); 控制台. log ("新建数组 : "+filtered" ; / 6 被删除

4. 在“ Lodash” JavaScript 库中使用“ remove () ” 方法

在下面的代码段中, JavaScript 库里有叫作“ Lodash ” 的删除() 方法。 这个方法也与过滤方法相似 。

var 数组 = [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10] 控制台. log ("原件数组: "+数组: "+数组: "+ + + + 数组: "; var remote Eplement = _.remove (ary, 函数(n) { return n\\ 6; }) 控制台. log ("修改后的数组: "+ 数组: "+ 数组: "removed 元素: "+ removeElement 元素 " ); / / 6 被删除 < src=" https://cdn.jsdelivr.net/npm/lodash@4.17.21lodash.min.js" / stamp >

5. 制作自定义除去方法

JavaScript没有本地的“ array. remove” 方法, 但我们可以创建一种使用以上方法的方法, 用于在以下代码片段中执行 。

var 数组 = [1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10] ; 函数数组 remove( arve, value) { 返回 arr. filter( 函数( 元素) { 返回元素 $= = 值;} } 控制台. log (" 原件数组: "+ 数组 " ); 控制台. log (" 修改数组: "+ trightremove( 数组, 6) ); / / 6 被删除 。

最后方法(第5项)更适合解决上述问题。