1.双重for循环 + splice()方法:
思路:第一层循环,所有数据,第二层循环,从第一层循环的下标+1开始,向后循环,
遇到重复的选项,则直接用splice删除相应的选项,最终返回去重后的数组
function unique(arr){
for(let i = 0 ; i < arr.length ; i++){
for(let j = i+1 ; j < arr.length ; j++){
if(arr[i] === arr[j]){
arr.splice(j,1);
j--;
}
}
}
return arr
}
a = ['1','2','3','8','3','2','4','2'];
console.log(unique(a)); //['1', '2', '3', '8', '4']
2.单循环+indexof
思路:新建一个数组 ,循环原数组,判断原数组的每项是否在新数组中已经存在,不存在则推入新数组
function unique(arr){
let newArr = [];
for(let i = 0 ; i < arr.length ; i++){
if(newArr.indexOf(arr[i]) == -1){
newArr.push(arr[i])
}
}
return newArr;
}
a = ['1','2','3','8','3','2','4','20','10','8'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']
3.利用对象属性名不能重复 + 新数组
思路:利用对象属性是否存在的特性,如果没有该属性则存入新数组。
function unique(arr){
let obj = {}
let newArr = [];
for(let i = 0 ; i < arr.length ; i++){
if(!obj[arr[i]]){
obj[arr[i]] = '添加该属性';
newArr.push(arr[i]);
}
}
return newArr;
}
a = ['1','2','3','8','3','2','4','20','10','8'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']
4.使用ES6的 Set方法 (new Set())
思路:ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
function unique(arr){
return [...new Set(arr)];
或者
return Array.from(new Set(arr));
}
a = ['1','2','3','8','3','2','4','20','10','8'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']
5.filter方法 + indexOf
function unique(arr){
let newArr = [];
arr.filter((item,index) => {
if(arr.indexOf(item) === index){
newArr.push(item)
}
})
return newArr
}
a = ['1','2','3','4','20','10','8','10','2'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']
6.reduce方法去重
第一种方式:
function unique(arr){
return arr.reduce((pre,cur) => {
if(!pre.includes(cur)){
return pre.concat(cur);
}else{
return pre;
}
},[]);
}
a = ['1','2','3','4','20','10','8','10','2'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']
第二种方式:
function unique(arr){
let obj = {}
let arr1 = arr.reduce((pre, cur) => {
if(obj[cur]) {
return pre
}else {
obj[cur] = '对象添加属性'
pre.push(cur)
return pre
}
},[])
}
a = ['1','2','3','4','20','10','8','10','2'];
console.log(unique(a)); //['1', '2', '3', '8', '4', '20', '10']