class Uniqe {
/**
@method 使用es6set方法去重
@problem {}没有去重,undefined和NaN去掉
**/
uniqueOne(arr) {
let list = JSON.parse(JSON.stringify(arr))
return Array.from(new Set(list))
}
/**
@method 双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值
@problem {}没有去重,undefined和NaN去掉
**/
uniqueTwo(arr) {
let list = JSON.parse(JSON.stringify(arr))
for (let i = 0; i < list.length; i++) {
for (let j = i + 1; j < list.length; j++) {
//第一个等同于第二个,splice方法删除第二个
if (list[i] === list[j]) {
list.splice(j, 1);
j--;
}
}
}
return list;
}
/**
@method 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组
@problem NaN、{}没有去重
**/
uniqueThree(arr) {
let array = [];
arr.forEach(item => {
if (array.indexOf(item) === -1) {
array.push(item)
}
})
return array;
}
/**
@method sort()排序方法,然后根据排序后的结果进行遍历及相邻元素比对
@problem {}没有去重,undefined和NaN去掉
**/
uniqueFour(arr) {
// if (!Array.isArray(arr)) {
// console.log('type error!')
// return;
// }
let list = JSON.parse(JSON.stringify(arr))
list = list.sort()
var arrry = [list[0]];
for (var i = 1; i < list.length; i++) {
if (list[i] !== list[i - 1]) {
arrry.push(list[i]);
}
}
return arrry;
}
/**
@method 利用filter
@problem {}没有去重,undefined和NaN去掉
**/
uniqueFive(arr) {
let list = JSON.parse(JSON.stringify(arr))
return list.filter(function(item, index, arr) {
//当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
return list.indexOf(item, 0) === index;
});
}
/**
@method 利用Map数据结构去重
@problem {}没有去重
**/
uniqueSix(arr) {
let map = new Map();
let array = new Array(); // 数组用于返回结果
for (let i = 0; i < arr.length; i++) {
if (map.has(arr[i])) { // 如果有该key值
map.set(arr[i], true);
} else {
map.set(arr[i], false); // 如果没有该key值
array.push(arr[i]);
}
}
return array;
}
/**
@method 依据对象的属性不能相同的特点进行去重
@problem true去掉了
**/
uniqueSeven(arr) {
var arrry = [];
var obj = {};
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
console.log(obj[arr[i]]);
if (!obj[arr[i]]) {
arrry.push(arr[i])
obj[arr[i]] = 1
} else {
obj[arr[i]]++
}
}
return arrry;
}
}
const arr = [1, 1, 'true', 'true', true, true, 15, 15, false, false, undefined, undefined, null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}];
let uniqe = new Uniqe()
let arrOne = uniqe.uniqueOne(arr)
let arrTwo = uniqe.uniqueTwo(arr)
let arrThree = uniqe.uniqueThree(arr)
let arrFour = uniqe.uniqueFour(arr)
let arrFive = uniqe.uniqueFive(arr)
let arrSix = uniqe.uniqueSix(arr)
let arrSeven = uniqe.uniqueSeven(arr)
// console.log(arrOne)
// console.log(arrTwo)
// console.log(arrThree)
// console.log(arrFour);
console.log(arrFive);
console.log(arrSix);
console.log(arrSeven);