一、Set數據結構去重
ES6中引入了Set數據結構,它類似於數組,但成員的值都是唯一的,沒有重複的值。可以將數組轉化為Set結構進而去重。
// 數組去重
const arr = [1, 1, 2, 3, 3];
const arrUnique = [...new Set(arr)];
console.log(arrUnique); // [1, 2, 3]
// 對象數組去重
const objArr = [{name: 'Alice', age: 18}, {name: 'Bob', age: 20}, {name: 'Alice', age: 18}];
const set = new Set(objArr.map(item => JSON.stringify(item)));
const uniqueObjArr = Array.from(set).map(item => JSON.parse(item));
console.log(uniqueObjArr); // [{name: 'Alice', age: 18}, {name: 'Bob', age: 20}]
使用Set的優點是去重效率高,可以去除數組和對象數組中的重複元素。但缺點是轉化為Set結構後,順序會被打亂,無法保持原數組順序。
二、Filter方法去重
利用filter方法和indexOf下標的特性可以對數組進行去重。當indexOf查詢元素的下標與當前循環索引相等時,說明元素第一次出現。
const arr = [1, 1, 2, 3, 3];
const arrUnique = arr.filter((item, index) => arr.indexOf(item) === index);
console.log(arrUnique); // [1, 2, 3]
缺點是 indexOf會進行多次循環查詢,當數組元素比較多時效率較低。
三、Map映射表去重
使用Map映射表數據結構將數組元素與出現次數作為Key-Value鍵值對進行存儲,取出count==1的Key值即為去重後的數組。
const arr = [1, 1, 2, 3, 3];
const map = new Map();
for(let i=0; i item[1] === 1).map(item => item[0]);
console.log(arrUnique); // [1, 2, 3]
四、Reduce方法去重
藉助reduce函數和includes來去重,當新的數組中包含元素就跳過,否則添加到新數組中。
const arr = [1, 1, 2, 3, 3];
const arrUnique = arr.reduce((pre, cur) => pre.includes(cur) ? pre : [...pre, cur], []);
console.log(arrUnique); // [1, 2, 3]
五、雙重循環去重
最簡單的去重方法是使用雙重循環,循環體內使用splice方法刪除後面的重複元素,效率最低,不推薦使用。
const arr = [1, 1, 2, 3, 3];
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);
}
}
}
console.log(arr); // [1, 2, 3]
在實際項目中,需要根據實際情況選擇適合的去重方式,以保證項目性能和效率。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/236420.html