代码:
<!doctype html>
<
html>
<
head>
<
meta
charset=
"utf-8"
>
<
title
>
数组去重
</
title
>
</
head>
<
body>
<
script
>
Array
.prototype.
px
=
function
(){
result
=
[];
for
(
var
i
=
0
;
i
<
this
.length;
i
++
){
for
(
var
j
=
i
+
1
;
j
<
this
.length;
j
++
){
if
(
this
[
i
]
===
this
[
j
]){
j
=++
i
;
}
console
.
log
(
result
);
}
result
.
push
(
this
[
i
]);
}
return
result
;
}
var
arr1
=
[
1
,
2
,
3
,
4
,
5
,
5
,
4
,
3
,
2
,
1
];
//定义一个数组
console
.
log
(
arr1
.
px
());
//使用扩展的自定义数组方法 px()
//控制台输出结果 [5,4,3,2,1]
<
/
script
>
</
body>
</html>
首先我们利用prototype 给数组扩展一个数组去重的方法 : px( )
然后定义一个数组 result 放置我们去重后的元素,也就是我们最后要得到的结果;
使用双层for循环排除重复元素,原理:
假设现在有数组 abc=[1,2,3,3,2,1]
完整过程: 当外层循环从1开始,也就是abc[0]时,我们内层的循环从 2开始,也就是abc[2],
让1 分别和剩余的 2,3,3,2,1 进行比较,如果1和后面的都不相同,我们就把 1 放入我们的结果
数组 result 中, 这很好理解,也就是内层循环完毕,执行result.push(this[i]);
但是如果遇到相同的了,比如1 和最后一个1相同,怎么办呢,那就跳过内层的循环,相当于内层
循环执行break操作;不要担心,为什么要跳过,因为后面有相同的啊,我们的策略是如果有相同的,
那么排除靠前的相同元素,留下剩下的相同元素,也就是我们不要第一个1 ,而是把最后一个1 存入数组;