一下方法使用均定义var arr = [1, 1, ‘true’, ‘true’, true, true, false, false,undefined, undefined, null, null, NaN, NaN, ‘NaN’, 0, 0, ‘a’, ‘a’, {},{}];
目录
1. 利用for嵌套for,然后splice去重
NaN和{}没有去重
function unique1(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] === arr[i]) {
arr.splice(j, 1); //splice修改原数组
j--;
}
}
}
return arr;
}
console.log(unique1(arr))//[1, 'true',true, false,undefined, null,NaN, NaN,'NaN', 0,'a', {}, {}]
2. indexOf去重
NaN和{}没有去重
function unique2(arr) {
let array = [];
for (let i = 0; i < arr.length; i++) {
if (array.indexOf(arr[i]) === -1) {
array.push(arr[i])
}
}
return array;
}
console.log(unique2(arr)) //[1, 'true',true, false,undefined, null,NaN, NaN,'NaN', 0,'a', {}, {}]
3. 利用ES6 Set去重
这种方法还无法去掉“{}”空对象
function unique3(arr) {
// return new Array(...new Set(arr));
return Array.from(new Set(arr))
}
console.log(unique3(arr)) // [1,'true',true,false,undefined, null,NaN,'NaN',0,'a',{},{}]
4.includes去重
无法去掉“{}”空对象
function unique4(arr) {
let array = [];
for (let i = 0; i < arr.length; i++) {
if (!array.includes(arr[i])) {
array.push(arr[i]);
}
}
return array;
}
console.log(unique4(arr))// [1,'true',true,false,undefined, null,NaN,'NaN',0,'a',{},{}]
5.map去重
无法去掉“{}”空对象
function unique5(arr) {
let map = new Map();
let array = []
for (let i = 0; i < arr.length; i++) {
if (map.has(arr[i])) {
map.set(arr[i], true);
} else {
map.set(arr[i], false);
array.push(arr[i]);
}
}
return array;
}
console.log(unique5(arr))// [1,'true',true,false,undefined, null,NaN,'NaN',0,'a',{},{}]
6.利用filtter+indexOf
此方法{}没有去重,NaN直接没了
function unique6(arr) {
let array = arr.filter((item, index, arrs) => {
return arrs.indexOf(item) == index
})
return array
}
console.log(unique6(arr))// [1,'true',true,false,undefined, null,'NaN',0,'a',{},{}]
5. 利用hasOwnProperty
此方法所有都去重了,利用是否存在对象属性
function unique7(arr) {
let obj = {};
return arr.filter((item, index) => {
return obj.hasOwnProperty(typeof item + item) ? false :
(obj[typeof item + item] = true)
})
}
console.log(unique7(arr)) //[1,'true',true,false,undefined, null,NaN,'NaN',0,'a',{}]