前端面试的时候,面试官经常问到你知道数组去重么?知道几种?如果你能答出10种,面试官肯定会对你刮目相看。接下来,我就将总结的11种数组去重方法一一列出来!
1.利用ES6 new Set()去重
这里就有两种方法:
- new Set()结合Array.from()
function unique(arr) {
return Array.from(new Set(arr));
}
- new Set()结合[...]
function unique(arr) {
return [...new Set(arr)];
}
2、sort排序
- sort()结合push()
function unique(arr) {
let newArr = [];
arr = arr.sort();
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== arr[i + 1]) {
newArr.push(i);
}
}
return newArr;
}
- sort()结合splice()
function uinque(arr) {
arr = arr.sort();
for (let i = 0; i < arr.length; i++) {
if (arr[i] === arr[i + 1]) {
arr.splice(i, 1);
i--;
}
}
return arr;
}
3、for双重循环 splice()
function unique(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(i, 1);
i--;
}
}
}
return arr;
}
4、indexOf()
function unique(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
5、利用对象的属性不能相同的特点进行去重
function unique(arr) {
let obj = {};
let newArr = [];
for (let i in arr) {
if (!obj[arr[i]]) {
newArr.push(arr[i]);
obj[arr[i]] = 1;
} else {
obj[arr[i]] = i++;
}
}
return newArr;
}
6、includes()结合push()
function unique(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
newArr.push(arr[i]);
}
}
return newArr;
}
7、filter过滤
function unique(arr) {
arr = arr.filter((item, index) => {
return arr.indexOf(item) === index;
});
return arr;
}
8、递归
function unique(arr) {
arr = arr.sort();
function loop(index) {
if (index >= 1) {
if (arr[index] === arr[index - 1]) {
arr.splice(index, 1);
}
loop(index - 1);
}
}
loop(arr.length - 1);
return arr;
}
9、利用Map数据结构去重
function unique(arr) {
let map = new Map();
newArr = [];
for (let i = 0; i < arr.length; i++) {
if (!map.has(arr[i])) {
map.set(arr[i], false);
newArr.push(arr[i]);
}
}
return newArr;
}