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>