这基本上算是一个老生常谈的问题了,也很基础,面试中问的可能性也很大,以下是我总结的一些方法,希望可以帮助到大家。
1、ES6中的set数据结构
let arr=[1,2,3,4,1,3,4,5];
//set中的成员具有唯一性,可以利用这一特性来去重
let newArr=[...new Set(arr)]
console.log(newArr) //[1,2,3,4,5]
2、利用indexOf方法
let arr = [1, 2, 3, 4, 1, 2, 3, 5];
function unique(arr) {
let tempArr = [];
for (let i = 0; i < arr.length; i++) {
// 判断新的数组中是否有当前值的下标
if(tempArr.indexOf(arr[i])==-1){
tempArr.push(arr[i])
}
}
return tempArr;
}
console.log(unique(arr)) //[ 1, 2, 3, 4, 5 ]
3、利用filter+indexOf方法
let arr = [1, 2, 3, 4, 1, 2, 3, 5];
function unique(arr) {
let tempArr = arr.filter((item,index)=>{
// 判断当前值的下标是否等于自身的下标,如果不相等说明是重复的
return arr.indexOf(item)===index
})
return tempArr;
}
console.log(unique(arr)) //[ 1, 2, 3, 4, 5 ]
4、利用Object键值对
let arr = [1, 2, 3, 4, 1, 2, 3, 5];
function unique(arr) {
let obj = {};
let tempArr = [];
for (let i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
tempArr.push(arr[i]);
obj[arr[i]] = 1;
} else {
obj[arr[i]]++;
}
}
return tempArr;
}
console.log(unique(arr)); //[ 1, 2, 3, 4, 5 ]
5、利用reduce方法
let arr = [1, 2, 3, 4, 1, 2, 3, 5];
function unique(arr) {
let tempArr = arr.reduce((previousValue, currentValue) => {
if (previousValue.indexOf(currentValue) == -1) {
previousValue.push(currentValue);
}
return previousValue;
}, []);
return tempArr;
}
console.log(unique(arr)); //[ 1, 2, 3, 4, 5 ]
6、利用includes方法
let arr=[1,2,3,4,5,1,2,3,4]
function unique(arr){
let tempArr=[];
for(let i = 0 ;i <arr.length;i++){
if(!tempArr.includes(arr[i])){
tempArr.push(arr[i])
}
}
return tempArr;
}
console.log(unique(arr)) //[1,2,3,4,5]
end