前言
最近在leetcode和codewars上刷算法題烙荷,遇到數(shù)組去重绿贞、數(shù)據(jù)類型轉換等問題時通常需要使用一大串原生方法來操作數(shù)組或字符串以達到目的油昂。過程中發(fā)現(xiàn)殴玛,ES6中提供了一個數(shù)據(jù)處理神器——Set對象菜循。它極大地簡化了某些數(shù)據(jù)處理的方法翘地,值得學習和使用。
關于ES6的學習癌幕,大家可以參考阮一峰老師的文檔衙耕。但文檔內(nèi)容繁多,最好的學習方式就是在實踐中遇到了勺远,然后主動地有針對性地去學習橙喘,這樣會有更深刻的理解。個人認為這是學習的最佳方式胶逢。
Set本身是一個構造函數(shù)渴杆,用來生成 Set 數(shù)據(jù)結構。它類似于數(shù)組宪塔,但是成員的值都是唯一的磁奖,沒有重復的值。
遍歷字符串
let str = new Set("Hello world!");
for(var str1 of str){
console.log(str1+" ")
}
// H e l o w r d !
Set對象會自動排除重復項某筐,那么它也能輕松進行數(shù)組去重:
數(shù)組去重
let arr = [12,23,45,34,56,56,87,23,45,12,89];
let arr1 = new Set(arr);
let arr2 = [];
for(let arr3 of arr1){
arr2.push(arr3)
}
console.log(arr2)
// [12, 23, 45, 34, 56, 87, 89]
優(yōu)化數(shù)組去重
function foo(arr){
return Array.from(new Set(arr)) // Array.from方法可以將 Set 結構轉為數(shù)組
}
const items = [1,2,3,4,1,2,1,3,1,2,3]
console.log(foo(items))
// [1, 2, 3, 4]
Set函數(shù)接受數(shù)組作為參數(shù)比搭,再使用Array.from將其轉換為數(shù)組,從而達到去重的目的
極簡數(shù)組去重
let arr1 = [12,13,23,45,46,48,78,79,45,12,13,23];
let arr = new Set(arr1)
console.log([...arr]) // [ 12, 13, 23, 45, 46, 48, 78, 79 ]
配合ES6的...方法南誊,將復雜的數(shù)組去重簡化的一行代碼[...new Set(array)]
身诺,以及字符串去重[...new Set('ababbc')].join('')
,簡直是極簡主義抄囚。
其他關于Set對象還有add霉赡、has等方法,可以用來處理算法中的Array.diff等問題幔托,由于篇幅原因穴亏,就不多介紹了蜂挪,大家自行去看文檔。