实现数组去重的常用方法
1.利用Set的特性进行去重
1 function unique(arr) { 2 return Array.from(new Set(arr)); 3 }
2.暴力法
1 function unique(arr) { 2 for (let i = 0; i < arr.length; i++) { 3 for (let j = i + 1; j < arr.length; j++) { 4 if (arr[i] === arr[j]) { 5 arr.splice(j, 1); 6 j--; 7 } 8 } 9 } 10 11 return arr; 12 }
3.利用数组的reduce方法进行去重
1 function unique(arr) { 2 return arr.reduce((accumulator, currentValue) => accumulator.includes(currentValue) ? accumulator : [...accumulator, currentValue], []); 3 }
4.利用数组的indexOf方法进行去重
1 function unique(arr) { 2 let res = []; 3 for (let i = 0; i < arr.length; i++) { 4 if (res.indexOf(arr[i]) === -1) { 5 res.push(arr[i]); 6 } 7 } 8 9 return res; 10 }
5.利用数组的sort方法进行去重
1 function unique(arr) { 2 let res = []; 3 if (arr.length < 1) { 4 return res; 5 } 6 7 arr.sort(); res.push(arr[0]); 8 for (let i = 1; i < arr.length; i++) { 9 if (arr[i] !== arr[i-1]) { 10 res.push(arr[i]); 11 } 12 } 13 14 return res; 15 }
6.利用map的特性进行去重
1 function unique(arr) { 2 let res = [], map = new Map(); 3 for (let i = 0; i < arr.length; i++) { 4 if (!map.has(arr[i])) { 5 res.push(arr[i]); 6 map.set(arr[i], 1); 7 } else { 8 map.set(arr[i], map.get(arr[i]) + 1); 9 } 10 } 11 12 return res; 13 }
7.利用数组的filter方法进行去重
1 function unique(arr) { 2 return arr.filter((currentValue, currentIndex) => { 3 return arr.indexOf(currentValue) === currentIndex; 4 }) 5 }