数组去重
1. 利用 Set 结构
以上去方式对 NaN 和 undefined 类型去重也是有效的,是因为 NaN 和 undefined 都可以被存储在 Set 中, NaN 之间被视为相同的值(尽管在 js 中:NaN !== NaN)。
const arr = [
1,
2,
2,
"abc",
"abc",
true,
true,
false,
false,
undefined,
undefined,
NaN,
NaN,
];
const set = new Set(arr);
const list = Array.from(set);
console.log(list); // [1, 2, 'abc', true, false, undefined, NaN]
2. 通过对象
利用对象 key 不可以重复的特点,对数组进行去重,但不可以直接对对象进行区分。
function removeDuplicate(arr) {
const obj = {};
const newList = [];
arr.forEach((item) => {
if (!obj[item]) {
obj[item] = true;
newList.push(item);
}
});
return newList;
}
const arr = [
1,
2,
2,
"abc",
"abc",
true,
true,
false,
false,
undefined,
undefined,
NaN,
NaN,
{
a: 111,
},
{
a: 111,
},
{
b: 111,
},
];
const newArr = removeDuplicate(arr);
console.log(newArr);
3. 利用 Map 进行去重
而通过 Map 去重,
function removeDuplicate(arr) {
const map = new Map();
const newList = [];
arr.forEach((item) => {
if (!map.has(item)) {
map.set(item, true);
newList.push(item);
}
});
console.log(map);
return newList;
}
var obj1 = { a: 111 };
var obj2 = { b: 111 };
const arr = [
1,
2,
2,
"abc",
"abc",
true,
true,
false,
false,
undefined,
undefined,
NaN,
NaN,
obj1,
obj1,
obj2,
];
removeDuplicate(arr);
4. 通过遍历
遍历是最常用的,网上说的多种去重,很多仅仅是使用不同的Array api 而已,如 includes , indexOf 等
const arr = [
1,
2,
2,
"abc",
"abc",
true,
true,
false,
false,
undefined,
undefined,
NaN,
NaN,
];
let list = [];
arr.forEach((item) => {
const flag = list.some((sub) => sub === item);
if (!flag) list.push(item);
});
console.log(list); // [1, 2, 'abc', true, false, undefined, NaN, NaN]