Javascript数组搜索并删除字符串?

Rol*_*ndo 105 javascript arrays

我有:

var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Run Code Online (Sandbox Code Playgroud)

我希望能够做到这样的事情:

array.remove("B");

但是没有删除功能.我该如何做到这一点?

Rob*_*b W 170

以相反的顺序遍历列表,并使用该.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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

当只需要删除第一个匹配项时,以下内容也将起作用:

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

  • 这不是关于速度,他甚至在答案中这么说.这是关于SKIPPING元素.如果您在第5位并且您拼接该位置,则位于位置6*的元素formelry现在为5*.仍然,你的循环计数器增加,下一次迭代是位置6,这是你跳过一个项目的地方.这就是为什么它的顺序相反. (11认同)

Tyr*_*nas 120

我实际上是使用更新的1行解决方案更新此线程:

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

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

注意:将删除所有出现的内容.

  • 这对于需要返回新状态的Redux来说是完美的. (5认同)
  • 此解决方案返回数组的副本,而使用 splice 会就地删除元素。您选择哪个取决于上下文。 (3认同)

qwe*_*ymk 19

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)????;
Run Code Online (Sandbox Code Playgroud)

这将照顾所有事件.


ene*_*esn 18

一个衬里列表

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

var array = ['A', 'B', 'C'];
Run Code Online (Sandbox Code Playgroud)

1.仅删除第一个: 使用如果您确定该项目存在,则<IE9中不支持

array.splice(array.indexOf('B'), 1);
Run Code Online (Sandbox Code Playgroud)

2.仅删除最后一个: 使用如果您确定该项目存在,则<IE9中不支持

array.splice(array.lastIndexOf('B'), 1);
Run Code Online (Sandbox Code Playgroud)

3.删除所有出现次数: <IE9中不支持

array = array.filter(v => v !== 'B'); 
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 13

只是

array.splice(array.indexOf(item), 1);
Run Code Online (Sandbox Code Playgroud)

  • 是的,除了如果没有找到任何内容,indexOf 将返回 `-1`,哎呀,splice 将从数组末尾删除 1 个元素 (3认同)