在项目中偶尔会用到数组,通过原生js去除数组的重复项。简单的记下几种方法,亲测可用。。
第一种方法:
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];
function unArray (Arr) {
var newArr = [];
for (var i = 0; i < Arr.length; i++) {
if (newArr.indexOf(Arr[i]) == -1){//检测newArr数组里是否包含Arr数组的内容,==-1检索的字符串没有出现则为-1
newArr.push(Arr[i])//把Arr数组的第i项插入新数组
}
};
return newArr;
}
unArray(Arr);
//console.log(unArray(Arr));
第一种方法是检测新数组newArr里有没有包含Arr里的i项,如果没有则向newArr里添加Aii[i]项,如果有则跳过;不做任何操作。
第二种方法:
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];
function unArray (Arr) {
var newArr = [Arr[0]];
for (var i = 0; i < Arr.length; i++) {
if (Arr.indexOf(Arr[i]) == i){//检测Arr数组第一次出现的位置是i
newArr.push(Arr[i])//把Arr数组的第i项插入新数组newArr
}
};
return newArr;//返回新数组newArr
}
unArray(Arr);
//console.log(unArray(Arr));
第二种方法是在Arr数组里检测,Arr.indexOf(Arr[i])返回某一项在Arr数组里第一次出现的位置,如果第一次出现就push到newArr数组去,如果第二次出现,则什么都不操作。
第三种方法:
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];
function unArray (Arr) {
var newArr = [],hash = {};//hash位hash表
for (var i = 0; i < Arr.length; i++) {
if (!hash[Arr[i]]){//如果hash表里没有第i项则
hash[Arr[i]] = true;//把第i项插入到hash表里
newArr.push(Arr[i])//把Arr数组的第i项插入新数组。此方法的时间消耗长,内存消耗大;
}
};
return newArr;
}
unArray(Arr);
//console.log(unArray(Arr));
第三种是关于hash表的,不太熟悉hash表,所以用到的很少啊。。
第四种方法
var Arr = [0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9];
function unArray (Arr) {
Arr.sort();//先排序
var newArr = [Arr[0]],firstArr = Arr[0];//创建一个新数组和一个变量firstArr,并赋值为数组Arr的第一个值
for (var i = 0; i < Arr.length; i++) {
if (Arr[i] !== firstArr){//如果数组的第i个不等于firstArr;
newArr.push(Arr[i]);//把第Arr[i]项插入新数组newArr
firstArr = Arr[i];//重新设置变量firstArr为rr[i],也就是刚插入newArr的那一项
}
};
return newArr;//返回新数组newArr
}
unArray(Arr);
// console.log(unArray(Arr));
此方法还的谢谢二楼。
网友评论
首先,给数组排序。
然后,记录第一个元素为到变量last。
接着,进入循环:如果当前元素等于last,那么continue;如果不等于last,push到newArr,并将当前元素设置为last。
正文的三个方法都基于搜索,这个方法基于排序。
从时间上来说,第二个方法不如第一个方法,因为第一个方法在newArr中搜索,而newArr肯定比Arr小,所以搜索更快,用时更少;第三个方法应该和第一个方法差不多。
而这个排序的方法一开始要排序一下,如果数组本身已经足够有序的话,应该比上面的方法都快——虽然平均说来应该和之前的方法是差不多的用时。