基本去重
const arr = [1,2,3,4,5,6,7,6,6,7,4];
const newArr = [...new Set(arr)];
复杂去重
/**
* 数组去重
* @param {Array} arr
* @return {Array}
*/
function uniqueArray(arr){
let result = [];
for(let i=0;i<arr.length;i++){
let item1 = arr[i];
let isFind = false;
// 判断result中是否存在item1
for(let j=0;j<result.length;j++){
let item2 = result[j];
// 判断两个值是否相等
if(equels(item1,item2)){
isFind = true;
}
}
if(!isFind){
result.push(item1);
}
}
return result;
}
//判断值是否是原始类型
function isPrimitivew(value){
return value === null || (typeof value !== 'object' && typeof value !== 'function');
}
//判断两个值是否相等
function equels(value1,value2){
//如果是原始类型 就直接比较
if(isPrimitivew(value1) || isPrimitivew(value2)){
return Object.is(value1,value2);
}
// 如果是对象
const entries1 = Object.entries(value1);
const entries2 = Object.entries(value2);
// 判断两个对象的键值对数量是否一致
if(entries1.length !== entries2.length){
return false;
}
// 以entries1为基准,判断entries2中是否存在与entries1中相同的键值对
for(const [key,value] of entries1){
//递归判断每个属性的值是否相等
if(!equels(value2[key],value)){
return false;
}
}
return true;
}
//数组去重
let arr1 = [1,2,3,2,6,{a:2,b:3},{a:2,b:3}];
console.log(uniqueArray(arr1));