【问题标题】:If statement in a while loop [duplicate]if循环中的语句[重复]
【发布时间】:2018-10-19 10:07:36
【问题描述】:

此代码将删除数组中的所有 'b' 元素。确实如此,但不完全如此。代码执行后还剩下一个'b'。为什么会这样?当我们将第三个参数设置为 splice 方法以将“b”元素更改为另一个时,它运行良好。但只有两个论点,没有。为什么?

let array = ['a','b','c','b','d','e','d','b','b','b','d','d'];

var i = 0;

while (i < array.length){

if (array[i] === 'b'){
    array.splice(i,1);
}
i++;
}
console.log(array);

【问题讨论】:

  • 您在每次迭代中增加 i,但是当您删除“b”时,您将跳过一个额外的字符,因为删除该字符会使数组更短。

标签: javascript arrays


【解决方案1】:

当应用splice 方法时,数组为re-indexed。当从给定数组中删除一个元素时,您将跳过 index

解决方法是在拼接后减小i的值。

let array = ['a','b','c','b','d','e','d','b','b','b','d','d'];
var i = 0;
while (i < array.length){
  if (array[i] === 'b'){
      array.splice(i,1);
      i--;
  }
  i++;
}
console.log(array);

在这种情况下,我建议你使用filter方法。

let array = ['a','b','c','b','d','e','d','b','b','b','d','d'];
array = array.filter(elem => elem != 'b');
console.log(array);

【讨论】:

  • 在后续步骤中,我想过滤掉该数组中所有其他出现的元素“b”。不是全部。我无法使用 filter() 实现它。我能用这种方法完成工作吗?
猜你喜欢
  • 2018-04-20
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多