目录
基本数据let arr = [1,2,3,4,1,5,5,'a','d','b','b'];
利用ES6的set
let setArr = [...new Set(arr)];
console.log(setArr);
利用双指针
var removeDuplicates = function(nums) {
const n = nums.length
const list = []
if (n === 0){
return false;
}
let fast = 0,slow = 0;
while (fast < n){
if (nums[fast +1 ] !== nums[fast]){
list[slow] = nums[fast]
++slow;
}
++fast;
}
return list
};
时间复杂度:O(N) 空间复杂度:O(1)
利用splice直接在原数组进行操作
function spliceArr(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);
}
}
}
return arr;
}
let b = spliceArr(arr);
console.log(b);
时间复杂度:O(N²) 空间复杂度:O(1)
利用对象的属性不能相同的特点进行去重
function objectArr(arr) {
let obj = {};
let array = [];
for (let i=0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]] = 1; // 可以随便设置
array.push(arr[i]);
}
}
return array;
}
let c = objectArr(arr);
console.log(c);
时间复杂度:O(N) 空间复杂度:O(N)
数组递归去重
function redArr(arr) {
arr.sort(function (a,b) {
return a - b;
});
function loop(index) {
if (index>=1){
if (arr[index] === arr[index-1]){
arr.splice(index,1);
}
loop(index-1);
}
}
loop(arr.length - 1);
return arr;
}
let d = redArr(arr);
console.log(d);
时间复杂度:O(NlogN) 空间复杂度:O(logN)
利用indexOf以及forEach/map/filter
function eachArr(arr) {
let array = [];
arr.forEach((v,i,arr)=>{
let bool = arr.indexOf(v,i+1);
if (bool === -1){
array.push(v);
}
});
return array;
}
let e = eachArr(arr);
console.log(e);
时间复杂度:O(N) 空间复杂度:O(N)
利用reduce
let newArr = arr.reduce(function (prev, cur) {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
},[]);
console.log(newArr);
时间复杂度:O(N) 空间复杂度:O(N)
补充
// 判断是否存在重复元素 [1,2,3,1]
let containsDuplicate = function(nums) {
const set = new Set();
for (const x of nums) {
if (set.has(x)) {
return true; // 存在重复的元素,返回true
}
set.add(x);
}
return false;
};
时间复杂度:O(N) 空间复杂度:O(N)
去掉重复ID的对象
let array = [
{id:1,name:"张三"},
{id:2,name:"李四"},
{id:1,name:"赵五"},
{id:3,name:"赵五"},
{id:3,name:"赵五"},
];
let arrayMap = array.map(item =>{
return item.id
})
let newList = array.filter(item =>{
return arrayMap.indexOf(item.id) === arrayMap.lastIndexOf(item.id)
})
console.log(newList); // {id:2,name:"李四"},