众所周知,在 JavaScript 中没有内置函数可以删除数组中的重复项。我注意到在 jQuery 中也缺少这种功能(它仅为 DOM 选择提供了唯一的函数),而我发现最常见的代码片段会为每个元素检查整个数组和其子集(我认为不太有效率),如下所示:
for (var i = 0; i < arr.length; i++)
for (var j = i + 1; j < arr.length; j++)
if (arr[i] === arr[j])
//whatever
所以我自己制作了一个:
function unique (arr) {
var hash = {}, result = [];
for (var i = 0; i < arr.length; i++)
if (!(arr[i] in hash)) { //it works with objects! in FF, at least
hash[arr[i]] = true;
result.push(arr[i]);
}
return result;
}
我想知道是否有其他算法被接受为这种情况的最佳算法(或者是否存在明显的缺陷可以修复),或者当您需要在JavaScript中使用此功能时应该怎么做(我知道jQuery不是唯一的框架,其他一些可能已经具备了此功能)。