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

array.remove(value);

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


当前回答

有许多方法可以删除指定元素从 JavaScript 阵列中得出的。 以下是我研究中可以想到的五种最佳方法。

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

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

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

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

console.log("Original array: " + arr);

var removed = arr.splice(4, 2);

console.log("Modified array: " + arr);

console.log("Elements removed: " + removed);

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

在以下代码段的以下代码段中,如果条件在用于循环。

var arr = [1, 2, 6, 3, 2, 6, 7, 8, 9, 10];

console.log("Original array: " + arr);

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

  if (arr[i] === 6) {

    var removed = arr.splice(i, 1);
    i--;
  }

}

console.log("Modified array: " + arr); // 6 is removed
console.log("Removed elements: " + removed);

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

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

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var filtered = array.filter(function(value, index, arr) {
  return value != 6 ;
});

console.log("Original array: "+array);

console.log("New array created: "+filtered); // 6 is removed

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

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

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
console.log("Original array: " + array);

var removeElement = _.remove(array, function(n) {
  return n === 6;
});

console.log("Modified array: " + array);
console.log("Removed elements: " + removeElement); // 6 is removed
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

5. 制作自定义除去方法

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

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

function arrayRemove(arr, value) {

  return arr.filter(function(element) {
    return element != value;
  });
}

console.log("Original array: " + array);
console.log("Modified array: " + arrayRemove(array, 6)); // 6 is removed

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

其他回答

我也碰巧遇到这样的情况 我不得不把一个元素从Array. .indexOf不是在互联网探索者工作,所以我分享我的工作jQuery.inArray()解决方案 :

var index = jQuery.inArray(val, arr);
if (index > -1) {
    arr.splice(index, 1);
    //console.log(arr);
}

删除某一要素或随后的元素,Array.spolice ()方法运作良好。

组合法通过删除或替换现有元素和(或)添加新元素来改变数组的内容,并返回被删除的项目。

语法: 数组. spice( index, deleteCount, items 1,...,..., itemsX)

index休息辩论是强制性的,休息辩论是任择的。

例如:

let arr = [1, 2, 3, 4, 5, 6];
arr.splice(2,1);
console.log(arr);
// [1, 2, 4, 5, 6]

注: Array.spolice ()如果您知道要删除的元素的索引, 可以使用该方法。 但我们可能还会有以下几个例子:

  1. 如果您想要删除仅最后一个元素, 您可以使用Array.pop ()

  2. 如果您想要删除仅第一个元素, 您可以使用矩阵. trip ()

  3. 如果您只知道元素, 而不知道元素的位置(或索引), 并且想要删除所有匹配元素Array. filter ()方法 :

    let arr = [1, 2, 1, 3, 4, 1, 5, 1];
    
    let newArr = arr.filter(function(val){
        return val !== 1;
    });
    //newArr => [2, 3, 4, 5]
    

    或者通过使用复数()方法作为:

    let arr = [1, 11, 2, 11, 3, 4, 5, 11, 6, 11];
        for (let i = 0; i < arr.length-1; i++) {
           if ( arr[i] === 11) {
             arr.splice(i, 1);
           }
        }
        console.log(arr);
        // [1, 2, 3, 4, 5, 6]
    

    或者假设我们想要删除del从数组arr:

    let arr = [1, 2, 3, 4, 5, 6];
    let del = 4;
    if (arr.indexOf(4) >= 0) {
        arr.splice(arr.indexOf(4), 1)
    }
    

    let del = 4;
    for(var i = arr.length - 1; i >= 0; i--) {
        if(arr[i] === del) {
           arr.splice(i, 1);
        }
    }
    
  4. 如果您只知道元素, 而不知道元素的位置( 或索引) , 并且想要使用 复数 () 方法删除第一个匹配元素 :

    let arr = [1, 11, 2, 11, 3, 4, 5, 11, 6, 11];
    
    for (let i = 0; i < arr.length-1; i++) {
      if ( arr[i] === 11) {
        arr.splice(i, 1);
        break;
      }
    }
    console.log(arr);
    // [1, 11, 2, 11, 3, 4, 5, 11, 6, 11]
    

查找index使用indexOf,然后删除该索引splice.

组合法通过删除现有元素和/或添加新元素来改变数组的内容。

const array = [2, 5, 9];

console.log(array);

const index = array.indexOf(5);
if (index > -1) { // only splice array when item is found
  array.splice(index, 1); // 2nd parameter means remove one item only
}

// array = [2, 9]
console.log(array); 

第二个参数的第二个参数splice是要删除的元素数。请注意splice修改现有数组,并返回含有已删除元素的新数组。


由于完整性的原因,此处为函数。第一个函数只删除一个单一事件(即删除第一个匹配5调自[2,5,9,1,5,8,5]),而第二个函数删除所有事件:

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;
}
// Usage
console.log(removeItemOnce([2,5,9,1,5,8,5], 5))
console.log(removeItemAll([2,5,9,1,5,8,5], 5))

在类型Script中,这些函数可用类型参数保持类型安全:

function removeItem<T>(arr: Array<T>, value: T): Array<T> { 
  const index = arr.indexOf(value);
  if (index > -1) {
    arr.splice(index, 1);
  }
  return arr;
}

spolice () 函数能够将数组中的项目还给您, 从特定的索引中删除项目 / 项 :

function removeArrayItem(index, array) {
    array.splice(index, 1);
    return array;
}

let array = [1,2,3,4];
let index = 2;
array = removeArrayItem(index, array);
console.log(array);

于2016年10月16日编辑

  • 做简单、直觉和直观的(a)项(b)项(b)目(c)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f)目(f):奥卡姆剃刀)
  • 执行不可更改( 原始数组保持不变)
  • 用标准的 JavaScript 函数执行, 如果您的浏览器不支持这些函数-使用多填

在此代码示例中,我使用array.filter(...)函数从数组中删除不想要的项目。此函数不改变原始数组,而创建一个新数组。如果浏览器不支持此函数(例如,在版本9之前的 Internet Explorerer 或1.5版本之前的Firefox),请考虑core-js.

删除项目( ECMA-262 版5 代码 AKA 旧风格 JavaScript)

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 ]

删除项目( ECMAScript 6 代码)

let value = 3

let arr = [1, 2, 3, 4, 5, 3]

arr = arr.filter(item => item !== value)

console.log(arr)
// [ 1, 2, 4, 5 ]

重要ECMAScript 6() => {}Internet Explorer 中不支持箭头函数语法,45版前的铬、22版前的Firefox和10版前的Safari 。 要在旧浏览器中使用 ECMAScript 6 语法巴比尔JS.


删除多个项目( ECMAScript 7 代码)

此方法的另一个好处是,您可以删除多个项

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(...)在互联网探索器、47版本前铬、43版本前Firefox、9版本前Safari、14版本前边缘中,完全不支持互联网探索器、47版本前铬、43版本前Firefox、9版本前Safari、14版本前边缘等功能,但您可以多元填充core-js.

删除多个项目( 未来, 也许)

如果"这个暗暗的语法"提案被接受过,你可以做到这一点:

// 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 :)

参考参考参考参考参考文献