splice删除重复的数组值不起作用javascript

时间:2017-03-25 08:38:44

标签: javascript arrays

这是我的代码

var numbers = [14, 14, 16, 25];

for (var i = 0; i < numbers.length; i++){
if (numbers[i] === 14) 
numbers.splice(i,1)
}

我想删除所有&#34; 14&#34;在阵列中。

此方法只删除一个重复值并将数组返回为[14,16,25]。但我希望它是[16,25]

1 个答案:

答案 0 :(得分:5)

这是因为您删除了索引0处的条目,并将i移至1.但索引0处的条目现在也是14.您是&#39;我跳过了它。

当您删除条目(其中任何一个修改现有数组)时,向后工作或不增加i;或通过filter构建一个全新的数组。

向后走:

&#13;
&#13;
var numbers = [14, 14, 16, 25];
for (var i = numbers.length - 1; i >= 0; i--) {
  if (numbers[i] === 14) {
    numbers.splice(i,1);
  }
}
console.log(numbers);
&#13;
&#13;
&#13;

删除条目时不会增加i

&#13;
&#13;
var numbers = [14, 14, 16, 25];
var i = 0;
while (i < numbers.length) {
  if (numbers[i] === 14) {
    numbers.splice(i,1);
  } else {
    ++i;
  }
}
console.log(numbers);
&#13;
&#13;
&#13;

通过filter创建新数组:

&#13;
&#13;
var numbers = [14, 14, 16, 25];
numbers = numbers.filter(function(value) { return value != 14; });
console.log(numbers);
&#13;
&#13;
&#13;