JS数组去掉重复元素

时间:2021-03-22 19:37:59

JS数组去掉重复元素

        面试前端必须准备的一个问题:怎样去掉Javascript的Array的重复项。据我所知,百度、腾讯、盛大等都在面试里出过这个题目。 这个问题看起来简单,但是其实暗藏杀机。 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解。

第一种实现方法:

Array.prototype.uniqueFun = 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.uniqueFun = 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;
}

这个方法的思路是先把数组排序,然后比较相邻的两个值。 排序的时候用的JS原生的sort方法,JS引擎内部应该是用的快速排序吧。

测试用例:

<html>
<head>
<script type="text/javascript">
window.onload=function(){
//创建一个数组
var arrayObj = new Array();
//给数组元素赋予新的值
for(var i=0;i<20;i++){
arrayObj[i]= "test00"+(i+1);
}
arrayObj[5]= "test0010";
// 将一个或多个新元素添加到数组结尾,并返回数组新长度
arrayObj. push("test0020");
//返回字符串,这个字符串将数组的每一个元素值连接在一起,中间用 separator 隔开。
var tempStr=arrayObj.join("; ");
alert(tempStr);
arrayObj.uniqueFun();
};

Array.prototype.uniqueFun = 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]);
}else
{
alert("重复的元素: "+this[i]);
break;
}
}
return re;
}
</script>
</head>
<body>

<h1>JS数组去掉重复元素</h1>

</body>
</html>