标签:
面试前端必须准备的一道问题:怎样去掉Javascript的Array的重复项。在最近面试中,百度、腾讯、盛大等都在面试里出过这个题目。这个问题看起来简单,但其实暗藏杀机。 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解。
我总共想出了三种算法来实现这个目的:
方法一:
Array.prototype.unique1 =
function
()
{
var
n = [];
//一个新的临时数组
for
(
var
i = 0; i <
this
.length; i++)
//遍历当前数组
{
//如果当前数组的第i已经保存进了临时数组,那么跳过,
//否则把当前项push到临时数组里面
if
(n.indexOf(
this
[i]) == -1) n.push(
this
[i]);
}
return
n;
}
Array.prototype.unique2 =
function
()
{
var
n = {},r=[];
//n为hash表,r为临时数组
for
(
var
i = 0; i <
this
.length; i++)
//遍历当前数组
{
if
(!n[
this
[i]])
//如果hash表中没有当前项
{
n[
this
[i]] =
true
;
//存入hash表
r.push(
this
[i]);
//把当前数组的当前项push到临时数组里面
}
}
return
r;
}
Array.prototype.unique3 =
function
()
{
var
n = [
this
[0]];
//结果数组
for
(
var
i = 1; i <
this
.length; i++)
//从第二项开始遍历
{
//如果当前数组的第i项在当前数组中第一次出现的位置不是i,
//那么表示第i项是重复的,忽略掉。否则存入结果数组
if
(
this
.indexOf(
this
[i]) == i) n.push(
this
[i]);
}
return
n;
}
Array.prototype.unique4 =
function
()
{
this
.sort();
var
re=[
this
[0]];
for
(
var
i = 1; i <
this
.length; i++)
{
if
(
this
[i] !== re[re.length-1])
{
re.push(
this
[i]);
}
}
return
re;
}
标签:
原文地址:http://www.cnblogs.com/sese/p/5129439.html