前端面試的時候,面試官經(jīng)常問到你知道數(shù)組去重么陨舱?知道幾種?如果你能答出10種版仔,面試官肯定會對你刮目相看游盲。接下來,我就將總結的11種數(shù)組去重方法一一列出來蛮粮!
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雙重循環(huán) 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數(shù)據(jù)結構去重
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;
}