数组去重
1. 利用ES6 set
去重
function fn(arr) {
return Array.from(new Set(arr))
return [...new Set(arr)]
}
let arr = [1, 2, 3, 4, 5, 5, 5, 4, 3, 2, 1];
console.log(fn(arr));
2. 利⽤for嵌套for,然后splice去重(ES5中最常⽤)
- 双层循环,外层循环元素,内层循环时⽐较值。值相同时,则删去这个值。
function fn(arr) {
let _arr = JSON.parse(JSON.stringify(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);
j--;
}
}
}
return _arr
}
3. 利⽤indexOf去重
function fn(arr) {
let _arr = [];
for(let i = 0; i < arr.length; i++) {
if (_arr.indexOf(arr[i]) === -1) {
_arr.push(arr[i]);
}
}
return _arr
}
4. 利⽤sort()
function fn(arr) {
let _arr = JSON.parse(JSON.stringify(arr)).sort()
let Arr = [_arr[0]];
for(let i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i - 1]) {
Arr.push(arr[i]);
}
}
return Arr
}
5. 利⽤对象的属性不能相同的特点进⾏去重
function fn(arr) {
let _arr= [];
let obj = {
};
for (let i = 0; i < arr.length; i++) {
if (!obj[arr[i]]) {
_arr.push(arr[i])
obj[arr[i]] = 1
} else {
obj[arr[i]]++
}
}
return _arr;
}
6. 利⽤includes
function fn(arr) {
let _arr= [];
for (let i = 0; i < arr.length; i++) {
if (!_arr.includes(arr[i])) {
_arr.push(arr[i])
}
}
return _arr;
}
7. 利⽤filter
function fn(arr) {
return arr.filter((item, index) => {
return arr.indexOf(item) === index;
});
}
8. 利⽤Map数据结构去重
function fn(arr) {
let map = new Map();
let _arr = [];
for (let i = 0; i < arr.length; i++) {
if(map.has(arr[i])) {
map.set(arr[i], true);
} else {
map.set(arr[i], false);
_arr.push(arr[i]);
}
}
return _arr ;
}