我有:

var array = new Array();
array.push("A");
array.push("B");
array.push("C");

我希望能够做到:

array.remove (" B ");

但是没有移除函数。我该怎么做呢?


以相反的顺序遍历列表,并使用.splice方法。

var array = ['A', 'B', 'C']; // Test
var search_term = 'B';

for (var i=array.length-1; i>=0; i--) {
    if (array[i] === search_term) {
        array.splice(i, 1);
        // break;       //<-- Uncomment  if only the first term has to be removed
    }
}

当必须删除所有出现的搜索词时,反向顺序很重要。否则,计数器将增加,您将跳过元素。

当只有第一个事件必须删除时,以下也将起作用:

var index = array.indexOf(search_term);    // <-- Not supported in <IE9
if (index !== -1) {
    array.splice(index, 1);
}

use:

array.splice(2, 1);

这将从数组中删除一项,从索引2开始(第3项)


你得自己写。您可以对数组进行循环,获取要删除的项的索引,并使用splice删除它。

或者,您可以创建一个新数组,遍历当前数组,如果当前对象与您想要删除的对象不匹配,则将其放入新数组中。


使用array.splice

/*array.splice(index , howMany[, element1[, ...[, elementN]]])

array.splice(index) // SpiderMonkey/Firefox extension*/

array.splice(1,1)

来源: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice


DEMO

你需要用.indexOf()找到你要找的位置,然后用.splice()删除它

function remove(arr, what) {
    var found = arr.indexOf(what);

    while (found !== -1) {
        arr.splice(found, 1);
        found = arr.indexOf(what);
    }
}

var array = new Array();
array.push("A");
array.push("B");
array.push("C");
 ​   
remove(array, 'B');
alert(array)​​​​;

这将解决所有问题。


我实际上更新了这个线程与一个更近期的1行解决方案:

let arr = ['A', 'B', 'C'];
arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']

这个想法基本上是通过选择与您想要删除的元素不同的所有元素来筛选数组。

注意:将删除所有出现的情况。

编辑:

如果你只想删除第一个事件:

t = ['A', 'B', 'C', 'B'];
t.splice(t.indexOf('B'), 1); // will return ['B'] and t is now equal to ['A', 'C', 'B']

简单解决方案(ES6)

如果你没有重复元素

Array.prototype.remove = function(elem) {
  var indexElement = this.findIndex(el => el === elem);
  if (indexElement != -1)
    this.splice(indexElement, 1);
  return this;
};   

在线演示(小提琴)


一行列表

让我们来解决这个数组的问题:

var array = ['A', 'B', 'C'];

1. 只删除第一个: 使用“如果您确定项目存在”

array.splice(array.indexOf('B'), 1);

2. 只删除最后一个: 使用“如果您确定项目存在”

array.splice(array.lastIndexOf('B'), 1);

3.删除所有出现的情况:

array = array.filter(v => v !== 'B'); 

简单的

array.splice(array.indexOf(item), 1);

const changedArray = array.filter( function(value) {
  return value !== 'B'
});

或者你可以用:

const changedArray = array.filter( (value) => value === 'B');

changedArray将包含没有值的'B'


这只对str list有效,查一下

myStrList.filter(item=> !["deletedValue","deletedValue2"].includes(item))

如果想要从字符串数组中移除字符串数组:

const names = ['1','2','3','4']
const excludeNames = ['2','3']
const filteredNames = names.filter((name) => !excludeNames.includes(name));
// ['1','4']