首页 / 问答 / [JavaScript]JavaScript中如何从数组中移除指定的元素对象呢?

[JavaScript]JavaScript中如何从数组中移除指定的元素对象呢?

array javascript 数组 1.27K 次浏览
0

在JavaScript开发中,我们可以使用数组的.push()方法向其中添加元素,那么是否有类似的简单方法可以将指定的元素从数组中移除呢,比如array.remove(item)这样的函数?

如果没有这样内置的从数组中移除元素的函数,又应该如何实现呢?

回复 [×]
提交评论
请输入评论内容

2 个回答

  • 0

    在JavaScript中,数组提供了内置的.indexOf().splice()这两个函数,我们首先可以利用indexOf函数找到要移除元素中数组中的索引位置,然后通过.splice()函数将这个索引位置的元素移除,具体实现代码如下:

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

    注:.splice()的第二个参数是要删除的元素数量。特别注意:.splice()函数将在适当的位置修改数组,并返回一个不包含已删除元素的新数组。

    以下是封装的两个从数组中移除指定元素的函数,其中第1个函数removeItemOnce()是移除数组中第一个匹配到的元素,而第2个函数removeItemAll()则是移除数组中所有匹配的指定元素,具体代码如下:

    function removeItemOnce(arr, value) {
      var index = arr.indexOf(value);
      if (index > -1) {
        arr.splice(index, 1);
      }
      return arr;
    }
    
    function removeItemAll(arr, value) {
      var i = 0;
      while (i < arr.length) {
        if (arr[i] === value) {
          arr.splice(i, 1);
        } else {
          ++i;
        }
      }
      return arr;
    }
    

    调用示例如下:

    console.log(removeItemOnce([2,5,9,1,5,8,5], 5)) //返回:[2,9,1,5,8,5]
    console.log(removeItemAll([2,5,9,1,5,8,5], 5)) //返回:[2,9,1,8]
    
    Rector的个人主页

    Rector

    2020-12-21 回答

    • 0

      在JavaScript中,数组还提供了.filter()函数,此函数会根据过滤条件创建一个新的数组对象,而不会修改原来的数组对象,具体实现如下:

      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 ]
      

      注:低版本的浏览器(如:IE9以下,Firefox 1.5以下等)并不支持.filter()函数,你可以使用[polyfill][1]作浏览器的兼容处理。

      ES6的语法实现如下:

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

      ES7实现移除多个指定元素的方法如下:

      let forDeletion = [2, 3, 5]
      let arr = [1, 2, 3, 4, 5, 3]
      arr = arr.filter(item => !forDeletion.includes(item))
      console.log(arr)
      // [ 1, 4 ]
      
      Rector的个人主页

      Rector

      2020-12-21 回答

      我来回答