即使存在重复项,也只从JS Array中删除1项

时间:2016-01-27 13:02:39

标签: javascript arrays indexof

以为如果人们需要它我会分享这个,因为我找不到类似的东西。

我想知道是否可以从数组中删除项目,即使存在该项目的重复项。

让我们看一些代码:

var myArray = ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'd', 'd', 'e'],
    itemToRemove = 'a',
    itemToAdd = 'f';

对于上面的示例,我想从数组中删除itemToRemove,但我不想删除所有这些,只是1.我想添加itemToAdd

为了给出一点背景,我建立了一个基于类别/个性的测验,每个问题的答案都有一个类别。我想将所有选定的类别存储在一个数组中,然后根据测验结束时最常见的类别显示结果。

问题出现的地方是用户可以返回并改变他们的选择,如果他们想要改变他们的想法,我需要删除以前的类别并添加新的类别。

1 个答案:

答案 0 :(得分:2)

所以这个答案实际上很简单。

var index = myArray.indexOf(itemToRemove);
if(index != -1) {
    array.splice(index, 1);
}

由于indexOf函数只找到第一个索引并且只找到1个索引,因此可以用它来删除一个数组项。

我们还需要谨慎使用indexOf,因为IE8不支持IE8,因为indexOf总是令人痛苦。

因此,以下代码可以使if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt /*, from*/) { var len = this.length >>> 0; var from = Number(arguments[1]) || 0; from = (from < 0) ? Math.ceil(from) : Math.floor(from); if (from < 0) from += len; for (; from < len; from++) { if (from in this && this[from] === elt) return from; } return -1; }; } 为您工作,必须在使用该函数之前运行。

$sql='CALL spAddNewHoliday(:EmployeeID,:StartDate,:EndDate)';
$stmt = $conn->prepare($sql);

来自这里: Why doesn't indexOf work on an array IE8?

如果有人想要更好的方法来做到这一点,我们将不胜感激。