# [JavaScript] 解析:取得不重複陣列 ###### tags: `JavaScript` ### 方法:使用new Set取得不重複資料 Set類似Array, 但其中元素的值都會是**唯一不重複**的 Set甚至可以搭配Array使用,例如將Array的值unique ``` const arr = [1, 2, 3, 4, 5, 5, 5] const setArr2 = new Set(arr) for (let i of setArr2) { console.log(i) } // 1 2 3 4 5 ``` ``` var array = [1, 2, 2, 3, 3, 3]; var result = Array.from(new Set(array)); console.log(result); // [1, 2, 3] ``` ``` var array = [{碗{....}}, {盤{....}} ,{碗{....}}]; var result = Array.from(new Set(array)); console.log(result); // ['碗', '盤'] 字串的形式 ``` > 注意:如果是以陣列包物件的形式進行new Set,回傳的雖然也是陣列的形式,不過裡頭會是字串的形式呈現,而非是陣列包物件。 目的:透過API取得的未整理資料,因為要在select上顯示各個區域的縣市,將經由new Set公式取得不重複的縣市,順利顯示在選單上,供使用者選取特定縣市。 ``` data: { datas: [], locations: [], }, methods: { getUniqueList() { const newlocations = new Set(); // 使用 ES6 中的 set() 取出唯一值 this.data.forEach((item, i) => { // 取出Region全部的值,並回傳至locations newlocations.add(item.Region) }) this.locations = Array.from(newlocations); //https://guahsu.io/2017/06/JavaScript-Duplicates-Array/ } //讓set與array.from公式取出不重複的值 //改名稱兩個都一樣分不清楚 }, ``` * 新增一個變數newlocations並帶入公式new Set * 此時我們需要datas裡的區域資料,因此用forEach取得全部的區域,當然forEach是可以將取得的資料做下一步動作 * 這時是關鍵,我們用add將取得區域資料arrary放入變數newlocations(new Set裡面) * 此時我們要將newlocation利用array.from轉成array匯入到data裡的location變數 * 最後location裡就是區域名稱的唯一值,可以大方的直接顯示在html頁面 * 可得知這裡使用new Set 、forEach、array.from 、 add()四個公式傳入,因此會有點混亂。 > 補充:new Set與add是同一組公式 > https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Set/add