我正在使用下面的代码片段从数组中删除所有出现的值(在本例中为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)
问题与同级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)
使用过滤器
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。由于我们不想将其添加到列表中,因此我们将其写!在该行的前面,因为我们希望发生相反的情况。
在更改数组并在拼接时也增加索引时,您可以采用另一种方法并从数组末尾开始。这意味着以下各项仍可在其原始索引处使用,并且可以在必要时进行检查和拼接,而不会留下一些未拼接的值。
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)
| 归档时间: |
|
| 查看次数: |
2779 次 |
| 最近记录: |