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

array.remove(value);

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


当前回答

您在数组中有 1 到 9 个, 您想要删除 5 个 。 请使用以下代码 :

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

var newNumberArray = numberArray.filter(m => {
  return m !== 5;
});

console.log("new Array, 5 removed", newNumberArray);


如果您想要多个值。例如:- 1,7,8

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

var newNumberArray = numberArray.filter(m => {
  return (m !== 1) && (m !== 7) && (m !== 8);
});

console.log("new Array, 1,7 and 8 removed", newNumberArray);


如果您想要删除数组中的数组值。 例如 : [3,4,5]

var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var removebleArray = [3,4,5];

var newNumberArray = numberArray.filter(m => {
    return !removebleArray.includes(m);
});

console.log("new Array, [3,4,5] removed", newNumberArray);

包括支持的浏览器链接链接.

其他回答

缩略复数()通过删除或替换现有元素和(或)添加新元素来改变数组的内容。

数组。 spice( 开始 [, 删除 [, 删除 [, 项1 [, 项2 [, . ] ] ] ]

开始

开始更改数组的索引( 与源值为 0 ) 。 如果数组的长度大于数组的长度, 则实际起始指数将设置为数组的长度。 如果为负, 则开始从数组结尾处( 与源值为-1) 的许多元素, 如果绝对值大于数组的长度, 则将设置为 0 。

删除“ 计算” 选项@ action

表示要删除的旧数组元素数的整数。

如果删除“计算”被省略,或者如果其值大于数组。 长度 - 开始( 即如果它大于数组中剩下的元素数量, 从开始) , 那么从开始到数组结尾的所有元素都将删除。 如果删除“ 计算” 0 或“ 负” , 则不删除任何元素。 在这种情况下, 您应该至少指定一个新元素( 见下文) 。

第1项,第2项,...可选

要添加到数组的元素, 从起始索引开始。 如果您不指定任何元素, 组合() 只会从数组中删除元素 。

如需更多参考,请通过:

Array. prototype.spice ()

主要有两种办法:

  1. 复数(): anArray.splice(index, 1);

     let fruits = ['Apple', 'Banana', 'Mango', 'Orange']
     let removed = fruits.splice(2, 1);
     // fruits is ['Apple', 'Banana', 'Orange']
     // removed is ['Mango']
    
  2. 删除删除: delete anArray[index];

     let fruits = ['Apple', 'Banana', 'Mango', 'Orange']
     let removed = delete fruits(2);
     // fruits is ['Apple', 'Banana', undefined, 'Orange']
     // removed is true
    

使用时要小心delete用于对数组的数组。它有利于删除对象的属性,但对于数组则不那么好。最好使用splice用于数组。

请注意,当使用delete对于一个数组,您可能会获得错误的结果anArray.length换句话说,delete将会删除元素, 但它不会更新长度属性的值 。

使用删除后,也可以期望在索引编号上出现空洞,例如,最后可能会有第1、3、4、8、9和11号指数,而之前的长度与使用删除时相同。for循环会崩溃, 因为索引不再是相继的 。

被迫使用delete出于某种原因,你应该使用for each需要通过数组循环时循环循环。事实上,总是避免使用索引for如果可能的话,循环。这样代码就会更稳健,更不易遇到指数问题。

您可以使用ES6. 例如,在此情况下删除值“ 3” :

var array=['1','2','3','4','5','6']
var newArray = array.filter((value)=>value!='3');
console.log(newArray);

产出:

["1", "2", "4", "5", "6"]

业绩 业绩业绩 业绩业绩

今天(2019-12-09),我为选择的解决方案对macOS v10.13.6(高塞拉利昂)进行性能测试。delete(A),但与其他方法相比,我并不使用它,因为它在数组中留下了空白。

结 结 结 结 结 结 结

  • 最快的解决方案是array.splice(C) (小型阵列有第二次的Safeare除外)
  • 以大数组盟誓,array.slice+splice(H) 是Firefox和Safari最快、不可改变的解决办法;Array.from(B) 铬含量最快
  • 可变溶液通常比不可变的更快1.5x-6x
  • 令人惊讶的是,变异解决办法(C)慢于不可变解决办法(G)

详细细节

在测试中,我以不同的方式从数组中删除中间元素。A、C本地的解决方案。B、D、E、F、G、H解决方案是不可改变的。

包含 10 元素的阵列结果

Enter image description here

在铬array.splice(C) 是当地最快的解决办法。array.filter(D) 是最快、不可改变的解决方案。array.slice(F). 您可以在机器上进行测试在这里.

带有 1 000 000 元素的阵列结果

Enter image description here

在铬array.splice(C) 是最迅速的就地解决办法delete(C) 的快速性相似,但它在数组中留下了一个空位(因此它不执行“完全移除”)。array.slice-splice(H) 是最快的不可改变的解决方案。 最慢的是array.filter(D和E). 您可以在您的机器上进行测试。在这里.

var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var log = (letter,array) => console.log(letter, array.join `,`);

function A(array) {
  var index = array.indexOf(5);
  delete array[index];
  log('A', array);
}

function B(array) {
  var index = array.indexOf(5);
  var arr = Array.from(array);
  arr.splice(index, 1)
  log('B', arr);
}

function C(array) {
  var index = array.indexOf(5);
  array.splice(index, 1);
  log('C', array);
}

function D(array) {
  var arr = array.filter(item => item !== 5)
  log('D', arr);
}

function E(array) {
  var index = array.indexOf(5);
  var arr = array.filter((item, i) => i !== index)
  log('E', arr);
}

function F(array) {
  var index = array.indexOf(5);
  var arr = array.slice(0, index).concat(array.slice(index + 1))
  log('F', arr);
}

function G(array) {
  var index = array.indexOf(5);
  var arr = [...array.slice(0, index), ...array.slice(index + 1)]
  log('G', arr);
}

function H(array) {
  var index = array.indexOf(5);
  var arr = array.slice(0);
  arr.splice(index, 1);
  log('H', arr);
}

A([...a]);
B([...a]);
C([...a]);
D([...a]);
E([...a]);
F([...a]);
G([...a]);
H([...a]);
This snippet only presents code used in performance tests - it does not perform tests itself.

浏览器比较:Chrome v78.0.0,Safari v.13.0.4和Firefox v71.0.0

Enter image description here

  • 弹出 - 从矩阵结束处删除
  • - 从数组的开头删除
  • 复项 - 从特定的数组索引中删除
  • - 过滤器允许您程序化地从数组中删除元素