數組去重的幾種方法。
// es6 new Set();
// ES6 提供了新的數據結構 Set。它相似於數組,可是成員的值都是惟一的,沒有重複的值。
// Set自己是一個構造函數,用來生成 Set 數據結構。
let arr1 = [1,3,3,2,2,1,3];
function uniq1(arr){
if (arr.length <= 1) { return arr; }
return [...new Set(arr)].sort(function(a,b){
return a - b;
});
}
console.log(uniq1(arr1)); //[1, 2, 3]
// includes
let arr2 = [1,4,3,3,4,2,1,2,4];
function uniq2(arr){
if (arr.length <= 1) { return arr; }
let result = [];
for(let i = 0;i<arr.length;i++){
if(!result.includes(arr[i])){
result.push(arr[i]);
}
}
result.sort(function(a,b){
return a-b;
});
return result;
}
console.log(uniq2(arr2)); //[1, 2, 3, 4]
// indexOf
let arr3 = [1,4,3,3,4,5,1,2,4,5,5];
function uniq3(arr){
if (arr.length <= 1) { return arr; }
let result = [];
for(let i = 0;i<arr.length;i++){
if(result.indexOf(arr[i]) === -1){
result.push(arr[i]);
}
}
result.sort(function(a,b){
return a-b;
});
return result;
}
console.log(uniq3(arr3)); //[1, 2, 3, 4, 5]
// reduce
let arr4 = [1,4,3,6,4,5,1,2,4,5,5,6,5,1];
function uniq4(arr){
if (arr.length <= 1) { return arr; }
return arr.reduce((pre,cur) => {
return pre.includes(cur) ? pre : [...pre,cur].sort((a,b) => a-b);
},[]);
}
console.log(uniq4(arr4)); // [1, 2, 3, 4, 5, 6]
// map object
let arr5 = [1,4,3,6,4,5,1,2,4,7,5];
function uniq5(arr){
if (arr.length <= 1) { return arr; }
let map = new Map();
let result = [];
for(let i = 0;i<arr.length;i++){
if(!map.has(arr[i])){
map.set(arr[i],true);
result.push(arr[i])
}
}
result.sort((a,b) => a - b);
return result;
}
console.log(uniq5(arr5)); //[1, 2, 3, 4, 5, 6, 7]
let arr6 = [1,4,3,6,4,5,1,2,4,7,5,5,4,6];
function uniq6(arr){
if (arr.length <= 1) { return arr; }
let obj = {};
let result = [];
for(let i = 0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]] = true;
result.push(arr[i]);
}
}
result.sort((a,b) => a - b);
return result;
}
console.log(uniq6(arr6)); //[1, 2, 3, 4, 5, 6, 7]
// splice
let arr7 = [1,4,3,6,4,5,8,1,2,8,4,7,5];
function uniq7(arr){
if (arr.length <= 1) { return 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--;
}
}
}
arr.sort((a,b) => a - b);
return arr;
}
console.log(uniq7(arr7)); //[1, 2, 3, 4, 5, 6, 7, 8]
若有錯誤或者不足還望指正,謝謝!!!