写在前面:大学时没有刷过的算法题迟早要补回来,计划是先去网上找一些经典的算法题,如数组排序,去重等等,然后再去leetcode由简至难按照标签继续刷题,我也会在博客里持续更新我刷的题目,感兴趣的话欢迎关注我
1.利用ES6的set方法
function unique(arr){
return Array.from(new Set(arr));
}
// 测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array)); // [1, 2, 3, 4, 55, 5, 66, 77]
2.利用对象属性存在的特性,如果没有该属性则存入新数组
function unique(arr){
var res = [];
var obj = {};
for(var i=0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]]=1;
res.push(arr[i]);
}
}
return res
}
//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array)); // [1, 2, 3, 4, 55, 5, 66, 77]
3.利用数组的indexOf/lastIndexOf 下标属性来查询
function unique(arr){
var res = [];
for(var i=0;i<arr.length;i++){
if(res.indexOf(arr[i])==-1){
res.push(arr[i]);
}
}
return res;
}
//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array)); // [1, 2, 3, 4, 55, 5, 66, 77]
4.利用数组原型对象上的includes方法
function unique(arr){
var res =[];
for(var i=0;i<arr.length;i++){
if(!res.includes(arr[i])){
res.push(arr[i])
}
}
return res
}
//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array)); // [1, 2, 3, 4, 55, 5, 66, 77]
5.利用数组原型上的filter和include方法
function unique(arr){
var res=[];
res=arr.filter(function(item){
return res.includes(item)?'':res.push(item);
});
return res;
}
//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array)); // [1, 2, 3, 4, 55, 5, 66, 77]
6.利用数组原型的forEach和includes方法
function unique(arr){
var res=[];
arr.forEach(function(item){
if(!res.includes(item)){
res.push(item);
}
})
return res;
}
//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array)); // [1, 2, 3, 4, 55, 5, 66, 77]
7.利用数组原型对象上的splice方法
function unique(arr){
var i,j,len=arr.length;
for(i=0;i<len;i++){
for(j = i+1;j<len;j++){
if(arr[i]==arr[j]){
arr.splice(j,1);
len--;
j--;
}
}
}
return arr
}
//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array)); // [1, 2, 3, 4, 55, 5, 66, 77]
8.复杂数组去重,判断单一固定属性值相同,则为重复数据
var studentList=[
{name:'Anna',age:22,schoolCode:111111},
{name:'Jessica',age:25,schoolCode:222222},
{name:'Alex',age:27,schoolCode:111111}
];
var resultArr=[];
var i,j,len=studentList.length;
for(i=0;i<len;i++){
for(j=i+1;j<len;j++){
if(studentList[i].schoolCode===studentList[j].schoolCode){
j=++i;
}
}
resultArr.push(studentList[i])
}
console.log(resultArr)