即使存在重复项,也仅从 JS 数组中删除一项
Remove only 1 item from JS Array even if duplicates exist
我想我会分享这个以防人们需要它,因为我找不到类似的东西。
我想知道是否可以从数组中删除一个项目,即使该项目存在重复项。
让我们看一些代码:
var myArray = ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'd', 'd', 'e'],
itemToRemove = 'a',
itemToAdd = 'f';
对于上面的示例,我想从数组中删除 itemToRemove
,但是,我不想删除所有的,只删除 1。然后我想添加 itemToAdd
。
为了提供一些背景信息,我正在构建一个基于 category/personality 的测验,每个问题的答案都有一个类别。我想将所有选择的类别存储在一个数组中,然后根据测验结束时最常见的类别显示结果。
问题是用户可以返回并根据需要更改他们的选择,因此如果他们改变主意,我需要删除之前的类别并添加新类别。
所以这个答案其实很简单。
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;
};
}
来源:
Why doesn't indexOf work on an array IE8?
如果有人有任何更好的方法来做到这一点,他们将不胜感激。
我想我会分享这个以防人们需要它,因为我找不到类似的东西。
我想知道是否可以从数组中删除一个项目,即使该项目存在重复项。
让我们看一些代码:
var myArray = ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'd', 'd', 'e'],
itemToRemove = 'a',
itemToAdd = 'f';
对于上面的示例,我想从数组中删除 itemToRemove
,但是,我不想删除所有的,只删除 1。然后我想添加 itemToAdd
。
为了提供一些背景信息,我正在构建一个基于 category/personality 的测验,每个问题的答案都有一个类别。我想将所有选择的类别存储在一个数组中,然后根据测验结束时最常见的类别显示结果。
问题是用户可以返回并根据需要更改他们的选择,因此如果他们改变主意,我需要删除之前的类别并添加新类别。
所以这个答案其实很简单。
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;
};
}
来源: Why doesn't indexOf work on an array IE8?
如果有人有任何更好的方法来做到这一点,他们将不胜感激。