第一种
1.将数组排序成新的数组arr2
2.将数组arr2第一个放在一个空的数组当中
3.然后将arr2的值依次与相邻数组比较,如果不相同就push进去
newArr[newArr.length - 1]就是代码数组的最后一项
var arr = [1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5]
var time1 = new Date().getTime();
function unique1(arr){
var arr2 = arr.sort();
var newArr = [arr2[0]];
for(var i=0;i<arr2.length;i++){
if( arr2[i] !== newArr[newArr.length - 1]){
newArr.push(arr2[i]);
}
}
return newArr;
}
console.log(unique1(arr));
console.log('1所花时间: ' + (new Date().getTime() - time1));//1
</script>
第二种
1.定义一个新的数组,并且存放原来数组的第一位
2.将原来的数组和新的数组比较,如果相同就终止比较break,如果不同就push到数组里面去
3.利用对象的key不重值 push到新的数组
var arr = [1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5]
var time3 = new Date().getTime();
function unique3(arr){
var obj={};
var newArr=[];
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]]=1;
newArr.push(arr[i]);
}}
return newArr;
}
console.log(unique3(arr));
console.log('3所花时间: ' + (new Date().getTime() - time3));
第三种
1.利用数组的indexOf()下标属性来查询
var arr = [1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5,3,1,5,6,7,4,1,1,2,3,5]
var time4 = new Date().getTime();
function unique4(arr){
var newArr = [];
for(var i=0;i<arr.length;i++){
if(newArr.indexOf(arr[i])=== -1){
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(unique4(arr));
console.log('4所花时间: ' + (new Date().getTime() - time1));
第四种
1.利用lastIndexOf
var time1 = new Date().getTime();
function unique9(arr){
var newArr = [];
for(var i=0;i<arr.length;i++){
newArr.lastIndexOf(arr[i]) !== -1 ? '' : newArr.push(arr[i]);
}
return newArr;
}
console.log(unique9(arr));
console.log('9所花时间: ' + (new Date().getTime() - time1));
第五种
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。
利用 filter和includes来过滤掉重复的数组
var time6 = new Date().getTime();
function unique6(arr){
var newArr = [];
newArr = arr.filter(function(item){
return newArr.includes(item) ? '': newArr.push(item);
})
return newArr;
}
console.log(unique6(arr));
console.log('6所花时间: ' + (new Date().getTime() - time1));
第六种
1.利用数组原型对象上的forEach和includes方法
var time7 = new Date().getTime();
function unique7(arr){
var newArr = [];
arr.forEach(function(item){
newArr.includes(item) ? '': newArr.push(item);
});
return newArr;
}
console.log(unique7(arr));
console.log('7所花时间: ' + (new Date().getTime() - time1));
第七种
1.利用数组原型上includes方法
var time5 = new Date().getTime();
function unique5(arr){
var newArr =[];
for(var i=0;i<arr.length;i++){
if(!newArr.includes(arr[i])){
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(unique5(arr));
console.log('5所花时间: ' + (new Date().getTime() - time1));
第八种
1.第一个数 以此和后面的书相比,如果相等 就删了,直到比到最后一个数
2.第二个数 再依次和后面的数相比,直到最后一个数.
var time8 = new Date().getTime();
function unique8(arr){
var len = arr.length;
for(var i=0;i<len;i++){
for(var j=i+1;j<len;j++){
if(arr[i]==arr[j]){
arr.splice(j,1);
j--;
len--;
}
}
}
return arr;
}
console.log(unique8(arr));
console.log('8所花时间: ' + (new Date().getTime() - time1));
第九种
1.set去重
var time10 = new Date().getTime();
function unique10(arr){
return Array.from( new Set(arr));
}
console.log(unique10(arr));
console.log('10所花时间: ' + (new Date().getTime() - time1));
第十种
var time2 = new Date().getTime();
function unique2(arr){
var newArr = [arr[0]];
for(var i= 0;i<arr.length;i++){
var flag = true;
for(var j=0;j<newArr.length;j++){
if(arr[i] === newArr[j]){
flag = false;
break;
}
}
if(flag){
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(unique2(arr));
console.log('2所花时间: ' + (new Date().getTime() - time1));