以为如果人们需要它我会分享这个,因为我找不到类似的东西。
我想知道是否可以从数组中删除项目,即使存在该项目的重复项。
让我们看一些代码:
var myArray = ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'd', 'd', 'e'],
itemToRemove = 'a',
itemToAdd = 'f';
对于上面的示例,我想从数组中删除itemToRemove
,但我不想删除所有这些,只是1.我想添加itemToAdd
。
为了给出一点背景,我建立了一个基于类别/个性的测验,每个问题的答案都有一个类别。我想将所有选定的类别存储在一个数组中,然后根据测验结束时最常见的类别显示结果。
问题出现的地方是用户可以返回并改变他们的选择,如果他们想要改变他们的想法,我需要删除以前的类别并添加新的类别。
答案 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?
如果有人想要更好的方法来做到这一点,我们将不胜感激。