转载自:http://www.cnblogs.com/novus/archive/2011/06/30/1921132.html
今天看了 oneroom的 【javascript数字数组去重复项】觉得挺有意思的。顺便把我以前在看的对比一下。也算是做个备份。
第一种:也是最笨的吧。
1
2
3
4
5
6
7
8
9
10
11
12
|
Array.prototype.unique1 =
function
() {
var
r =
new
Array();
label:
for
(
var
i = 0, n =
this
.length; i < n; i++) {
for
(
var
x = 0, y = r.length; x < y; x++) {
if
(r[x] ==
this
[i]) {
continue
label;
}
}
r[r.length] =
this
[i];
}
return
r;
}
|
第二种:这个正则天书一样。
1
2
3
|
Array.prototype.unique2 =
function
() {
return
this
.sort().join(
",,"
).replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,
"$1$2$4"
).replace(/,,+/g,
","
).replace(/,$/,
""
).split(
","
);
}
|
第三种:使用对象的【hasOwnProperty】方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Array.prototype.unique3 =
function
() {
var
temp = {}, len =
this
.length;
for
(
var
i=0; i < len; i++) {
var
tmp =
this
[i];
if
(!temp.hasOwnProperty(tmp)) {
temp[
this
[i]] =
"my god"
;
}
}
len = 0;
var
tempArr=[];
for
(
var
i
in
temp) {
tempArr[len++] = i;
}
return
tempArr;
}
|
第四种:先排序,前项比后项。这个方法挺简单的,但也实用。
1
2
3
4
5
6
7
8
9
10
11
12
|
Array.prototype.unique4 =
function
() {
var
temp =
new
Array();
this
.sort();
for
(i = 0; i <
this
.length; i++) {
if
(
this
[i] ==
this
[i+1]) {
continue
;
}
temp[temp.length]=
this
[i];
}
return
temp;
}
|
下面是以前经常用的,效率也很好。有点想hash表的感觉。
1
2
3
4
5
6
7
8
9
10
11
|
Array.prototype.unique5 =
function
() {
var
res = [], hash = {};
for
(
var
i=0, elem; (elem =
this
[i]) !=
null
; i++) {
if
(!hash[elem])
{
res.push(elem);
hash[elem] =
true
;
}
}
return
res;
}
|
还要谢谢oneroom 他给demo里面的时间计算函数很好用。以前我都不知道测试这些效率呢。
稍后附上他的demo和Watch文件。
作者:Novus
出处:http://www.cnblogs.com/novus/
本文版权归作者和博客园共有,欢迎任何形式的转载,但请务必注明出处。