前言:
常規(guī)的數(shù)組扁平化的寫法以及常見的面試中數(shù)組去重的幾種寫法,順便記錄一下數(shù)組去重的性能分析,特別是面對大量數(shù)據(jù)的操作,方便以后在項目中更高效的使用.
數(shù)組扁平化的常規(guī)寫法跟es6寫法比較
常規(guī)寫法:(扁平化,去重,排序)
let arr = [
[1, 2, 2],
[3, 4, 5, 5],
[6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10
];
//實現(xiàn)數(shù)組扁平化,正常思路
function flat1(arr) {
//扁平化數(shù)組
let arr1 = arr.toString().split(',')
//數(shù)組排序
console.log(arr1) // ["1", "2", "2", "3", "4", "5", "5", "6", "7", "8", "9", "11", "12", "12", "13", "14", "10"]
let arr2 = arr1.map(it => Number(it)).sort((a, b) => {
return a - b
});
console.log(arr2); // [1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14]
//數(shù)組去重
for (let i = 0; i < arr2.length; i++) {
if (arr2[i] === arr2[i + 1]) {
arr2.splice(i, 1);
i--
}
}
console.log(arr2); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
}
es6(arr.flat)
//es6數(shù)組扁平化 去重, 排序
var arrNew = Array.from(new Set(arr.flat(Infinity))).sort((a, b) => {
return a - b
});
console.log(arrNew); //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
數(shù)組去重的幾種常規(guī)方法跟性能檢測(高性能數(shù)組去重)
首先我們先構造兩個數(shù)據(jù)量比較大的數(shù)據(jù)數(shù)組,然后拼接起來構造重復項,然后拿到去重前后的時間戳,然后比較不同方法的耗時.
let arr1 = Array.from(new Array(100000), (x, index) => {
return index;
})
let arr2 = Array.from(new Array(80000), (x, index) => {
return index;
})
let startTime = new Date().getTime();
console.log('去重后的數(shù)組長度 =', dupliate(arr1, arr2).length)
let endTime = new Date().getTime();
console.log('耗費時長 =', (endTime - startTime));
1.filter加indexOf數(shù)組去重
//1.filter加indexOf數(shù)組去重
function dupliate(arr1, arr2) {
let arr = arr1.concat(arr2)
return arr.filter((item, index) => {
return arr.indexOf(item) === index;
})
}

filter加indexOf數(shù)組去重.jpeg
2.雙重for循環(huán)數(shù)組去重
function dupliate(arr1, arr2) {
let arr = arr1.concat(arr2);
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--; //數(shù)組長度改變 下標自減
}
}
}
return arr;
}

雙重for循環(huán)數(shù)組去重.jpeg
3.利用sort進行數(shù)組去重
function dupliate(arr1, arr2) {
let arr = arr1.concat(arr2);
let arr3 = arr.sort();
let result = [];
for (let i = 0; i < arr3.length; i++) {
if (arr3[i] !== arr3[i + 1]) {
result.push(arr3[i])
}
}
return result;
}

sort排序數(shù)組去重.jpeg
4.es6 new Set()
function dupliate(arr1, arr2) {
let arr = arr1.concat(arr2);
let result = Array.from(new Set(arr));
return result;
}

new Set數(shù)組去重.jpeg
5.for...of語句和object的使用
function dupliate(arr1, arr2) {
let arr = arr1.concat(arr2);
let result = [];
let obj = {};
for (let item of arr) {
if (!obj[item]) {
result.push(item);
obj[item] = 1;
}
}
return result;
}

for...of和object數(shù)組去重.jpeg