.splice( $.inArray()) 应该只删除匹配项

.splice( $.inArray()) should only remove matching item

我有五个 link。每个 link 都有一个 id。我将这些 ID 中的每一个都保存到一个数组中。

当点击 link 我试图从数组中删除匹配的点击 link id。

我正在尝试使用以下方法执行此操作:

shuffledBlockIds.splice( $.inArray(removeItem, shuffledBlockIds), 1 );

第一次点击时该项目删除正常,但是如果我再次点击它只会删除另一个项目(尽管点击的 ID 不再存在)。

如果点击的 ID 存在于数组中,我如何只删除一个项目?

查看了 indexOf(),但在 IE8 中应该不起作用。

IE9+ 解决方案也将受到欢迎 - 只是想知道是否有一些聪明的 Jquery 方法也可以处理 IE8。

Fiddle: http://jsfiddle.net/dyoew9ga/

如果 removeItem 不存在于 shuffledBlockIds 中,$.inArray() 将 return -1.

documentation for splice() 说(强调我的):

start

Index at which to start changing the array. If greater than the length of the array, actual starting index will be set to the length of the array. If negative, will begin that many elements from the end.

因此,splice() 将最终从数组中删除最后一个元素。

要解决此问题,请使用显式测试:

var index = $.inArray(removeItem, shuffledBlockIds);
if (index >= 0) {
    shuffledBlockIds.splice(index, 1);
}