如何从JavaScript中的数组中删除特定的元素?

我有一个整数数组,我使用.push()方法向它添加元素。

有没有简单的方法从数组中删除特定的元素? 相当于类似array.remove(int);

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


找到要删除的数组元素的index ,然后使用splice删除该索引。

var array = [2, 5, 9];
var index = array.indexOf(5);
if (index > -1) {
  array.splice(index, 1);
}
// array = [2, 9]

splice的第二个参数是要移除的元素的数量。 请注意, splice会在适当位置修改数组并返回一个包含已被移除的元素的新数组。


注意 :浏览器对indexOf的支持是有限的; 它在Internet Explorer 7和8中不受支持。

如果您需要在不受支持的浏览器中使用indexOf ,请尝试以下polyfill在这里找到关于这个polyfill更多信息。

Array.prototype.indexOf || (Array.prototype.indexOf = function(d, e) {
    var a;
    if (null == this) throw new TypeError('"this" is null or not defined');
    var c = Object(this),
        b = c.length >>> 0;
    if (0 === b) return -1;
    a = +e || 0;
    Infinity === Math.abs(a) && (a = 0);
    if (a >= b) return -1;
    for (a = Math.max(0 <= a ? a : b - Math.abs(a), 0); a < b;) {
        if (a in c && c[a] === d) return a;
        a++
    }
    return -1
});

我不知道你期待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];

2016年10月编辑

  • 做到简单,直观和明确(https://en.wikipedia.org/wiki/Occam%27s_razor)
  • 它不可变(原始数组保持不变)
  • 如果您的浏览器不支持它们,请使用标准的JS功能 - 使用polyfill
  • 在这个代码示例中,我使用“array.filter(...)”函数从数组中删除不需要的项目,该函数不会更改原始数组并创建一个新数组。 如果您的浏览器不支持此功能(例如,版本9之前的IE或版本1.5之前的Firefox),请考虑使用Mozilla中的过滤器填充

    删除项目(ECMA-262版5代码又名oldstyle JS)

    var value = 3
    
    var arr = [1, 2, 3, 4, 5, 3]
    
    arr = arr.filter(function(item) { 
        return item !== value
    })
    
    console.log(arr)
    // [ 1, 2, 4, 5 ]
    

    删除项目(ES2015代码)

    let value = 3
    
    let arr = [1, 2, 3, 4, 5, 3]
    
    arr = arr.filter(item => item !== value)
    
    console.log(arr)
    // [ 1, 2, 4, 5 ]
    

    重要 ES2015“()=> {}”在IE中完全不支持“箭头函数”语法,Chrome前45版本,Firefox前22版本,Safari前10版本。 要在旧版浏览器中使用ES2015语法,您可以使用BabelJS


    删除多个项目(ES2016代码)

    此方法的另一个优点是可以删除多个项目

    let forDeletion = [2, 3, 5]
    
    let arr = [1, 2, 3, 4, 5, 3]
    
    arr = arr.filter(item => !forDeletion.includes(item))
    // !!! Read below about array.includes(...) support !!!
    
    console.log(arr)
    // [ 1, 4 ]
    

    重要的 “array.includes(...)”功能在IE中完全不支持,47版本之前的Chrome,43版本之前的Firefox,9版本之前的Safari和14版之前的Edge,所以这里是来自Mozilla的polyfill

    删除多个项目(尖端实验JavaScript ES2018?)

    // array-lib.js
    
    export function remove(...forDeletion) {
        return this.filter(item => !forDeletion.includes(item))
    }
    
    // main.js
    
    import { remove } from './array-lib.js'
    
    let arr = [1, 2, 3, 4, 5, 3]
    
    // :: This-Binding Syntax Proposal
    // using "remove" function as "virtual method"
    // without extending Array.prototype
    arr = arr::remove(2, 3, 5)
    
    console.log(arr)
    // [ 1, 4 ]
    

    在BabelJS中自己试试:)

    参考

  • Array.prototype.includes
  • 这种绑定语法建议
  • 功能组成
  • 链接地址: http://www.djcxy.com/p/41.html

    上一篇: How do I remove a particular element from an array in JavaScript?

    下一篇: How to revert Git repository to a previous commit?