有时需要触摸,需要删除数组中重复的元素,只有一个。第一个想法是使用2循环来比较和删除重复元素。代码如下:

方法1:

复制代码代码如下所示:
array.prototype.distinct =函数(){
var arr = { },
this.length len =;

对于(var i = 0;i < i;i + +){
对于(var j = i + 1;j;<;j + +){
如果(这个{这个} =这个{ } }){
j +1;
}
}
Arr.push(本{我});
}
报酬;
};


如果数据比较及时,方法1的使用会更糟。请继续看下面的方法。

方法2:

复制代码代码如下所示:
array.prototype.distinct =函数(){

var =,
ARR = self.concat(。排序()); / /创建一个新数组排序

Arr.sort(功能(A,B){
如果(a b){
var n = self.indexof(一); / /得到的指标值
Self.splice(n,1);
}
});

回归自我;

};


方法2使用排序自定义回调函数和使用不支持的索引方法,一个IE6 / 7 / 8.of课程,可以模拟自己的指标,但更大的问题是,有IE6 / 7 / 8和标准浏览器的排序方法之间的差异的。使用这种方法在IE6陷阱/ 7 / 8多个自定义回调函数,自定义排序上面代码中的回调函数将被直接报道缺乏在IE6 / 7 / 8数字错误,返回回调函数是南你会报这个错误,因为回调函数只能返回整数的理论梳理即使忽略返回值的问题,其他的问题,最后没有太多的纠缠。方法2不在IE6 / 7 / 8的工作。

从傻瓜码头看起来有方法3,下面是他的代码:

复制代码代码如下所示:
阵列的原型。delrepeat =函数(){
VaR NewArray = { };
无功provisionaltable = { };
对于(var i = 0,item;(项目=这个{ })!= NULL;i + +){
如果(!provisionaltable {项目}){
NewArray.push(项);
provisionaltable {项目} =真;
}
}
返回新数组;
};


方法3使用一个临时对象存储数组的元素,如果一个重复数组元素被触摸,它将被忽略:

复制代码代码如下所示:
var arr = { 'firefox ',1,1};


如果我们使用上面的方法3,我们将删除1和1作为重复元素,所以我们对方法3做了一些修改来解决这个问题。
方法3的修改版本:

复制代码代码如下所示:
array.prototype.distinct =函数(){
var arr = { },
obj = { },
我= 0,
this.length len =,
结果;

为了(;;我;我;+){
结果=这个{ };
如果(obj {结果}!=结果){
Arr.push(结果);
obj {结果} =结果;
}
}

报酬;
};


然后我读了愚人码头文章后面的评论。这种方法是由Rekey提供的相同,但是这种方法也有缺陷。如果我们遇到这样一个2B数组,我们将有一个杯子。

复制代码代码如下所示:
var arr = { 'firefox ',1,1,1 };


上面的数组被3的方法修改。它不会删除3个元素。然而,数组有点极端。如果字符串的文字和相同数量的数据遇到,应该进行预处理以避免这种错误。使用临时对象的方法在标准排序浏览器中略快于排序算法,在浏览器中也应该有区别。