JavaScript从数组中删除所有出现的值

Kir*_*ash 3 javascript arrays

我正在使用下面的代码片段从数组中删除所有出现的值(在本例中为97)。我不明白为什么输出数组中有一个值97。当我删除32时,它将删除数组中的所有32。与6相同。这里的97有什么问题?对我来说有点奇怪。(我本以为可能是97键入不正确或什么)。

var inputArr = [3, 97, 32, 6, 97, 2, 9,32, 1, 32, 97, 97, 6, -1, 5];

function removeItem(array, item) {
  for(i = 0; i<array.length; i++){
    if(array[i] == item) {
      array.splice(array.indexOf(item), 1);
    }
  }
}
removeItem(inputArr, 97); removeItem(inputArr, 32); removeItem(inputArr, 6);

document.getElementById("output").innerHTML = inputArr;
Run Code Online (Sandbox Code Playgroud)
<p id="output"></p>
Run Code Online (Sandbox Code Playgroud)

Sur*_*yan 6

问题与同级97s-有关1, 32, 97, 97, 6。当您按此顺序拼接第一个97时,下一个97会更改其索引并进入第一个。但是变量i正在跟踪该项目。

删除项目时,可通过减少索引--i

您也可以通过filter功能来实现。这将创建一个新数组,您只需要返回它。在这里,我创建input了一个带有数组的对象和一个对象,该函数过滤input并返回当前对象。这将使您层叠一些我认为从代码样式来看很漂亮的功能,并且可以在某些方面帮助您。

const obj = {
   input: [3, 97, 32, 6, 97, 2, 9,32, 1, 32, 97, 97, 6, -1, 5],
   removeItem(item) {
      this.input = this.input.filter(i => i !== item);
      return this;
   }
}

const output = obj.removeItem(97)
                  .removeItem(32)
                  .removeItem(6); 
      
console.log(output.input);
Run Code Online (Sandbox Code Playgroud)

  • 或者只是`removeItems =(a,b)=&gt; a.filter(x =&gt;!b.includes(x))` (2认同)

Pav*_*vlo 6

使用过滤器

const newArray = inputArr.filter(element => ![97, 32, 6].includes(element));
Run Code Online (Sandbox Code Playgroud)

所做filter的是它创建了一个新的array. 为了确定 new 中应该包含什么array,它需要遍历element旧数组中的每个数组,如果我们返回true当前数组element,则将其添加到 new 中array

element => ![97, 32, 6].includes(element)意味着我们询问 是否array [97, 32, 6]具有当前 的值element。由于我们不想将其添加到列表中,因此我们将其写!在该行的前面,因为我们希望发生相反的情况。


Nin*_*olz 5

在更改数组并在拼接时也增加索引时,您可以采用另一种方法并从数组末尾开始。这意味着以下各项仍可在其原始索引处使用,并且可以在必要时进行检查和拼接,而不会留下一些未拼接的值。

function removeItem(array, item) {
    var i = array.length;

    while (i--) {
        if (array[i] === item) {
            array.splice(array.indexOf(item), 1);
        }
    }
}

var inputArr = [3, 97, 32, 6, 97, 2, 9, 32, 1, 32, 97, 97, 6, -1, 5];

removeItem(inputArr, 97);
removeItem(inputArr, 32);
removeItem(inputArr, 6);

console.log(inputArr);
Run Code Online (Sandbox Code Playgroud)