数组去重这个问题我想很多小伙伴都遇到过,今天我们就来动手实现一下:
方法一:
function unrepeat(arr){
var newarr = [];
for(var i=0;i<arr.length;i++){
var isrepeat = false;//表示是否重复的标识符;
for(var j=0;j<newarr.length;j++){
if(arr===newarr[j]) //此处一定要用三等号,即值与类型全部相同,若用双等号,则会将数组中数据类型不相同,但值相同的项当做重复项去掉;
{
isrepeat = true;
break;
}
}
if(!isrepeat){
newarr.push(arr);
}
}
return newarr;
}
var num = [3,5,8,"3",1,6,5];
window.onload = function(){
alert(unrepeat(num));
}
此方法算是最初级的方法,基本大家都能想到,但是这样的双重循环时间复杂度较高,执行效率低,看下面的方法:
方法二:
function unrepeat(arr){
var newarr = [];
for(var i=0;i<arr.length;i++)
{
if(newarr.indexOf(arr)==-1)
{
newarr.push(arr);
}
}
return newarr;
}
var num = [3,5,8,"3",1,6,5];
window.onload = function(){
alert(unrepeat(num));
}
次方法利用indexOf检测,通过判断indexOf返回的值来判断是否重复,代码简洁,效率较上一方法有所提高;
今天的这俩种发放都是比较初级的,高手们还有很多效率更高的算法,后期我如果完全掌握的话还会补上,如果大家有什么好的方法也可以分享出来,大家一起进步。
备注:文中如果有什么地方不对的话希望大家积极指出,谢谢了!