1. 程式人生 > >Javascript set結構 (去重)

Javascript set結構 (去重)

javascript 的set結構用來去重非常方便,這裡記錄一下。

1 背景

最近遇到問題,要記錄某個人曾經用過的手機和作業系統記錄到一個json

{
	"os":["android","ios"],
	"android":["mi8","p20"],
	"ios":["iphone8","iphonex"]
}

而每個手機的源資料格式是這樣的:

{
	"os" :"android"
	"eq":"mi8"
}

這裡不希望記錄進去重複的型號和重複的作業系統。
用陣列自己去判斷是否重複太過於複雜,這裡就記得曾經瞭解過JavaScript中有set資料結構。

2 set資料結構

Set是一種類似於Map的資料結構,也是一組key的集合,但不儲存value。由於key不能重複,所以,在Set中,沒有重複的key,這種特性就起到資料去重的效果,重複的資料不會被寫入到set中。

2.1 set建立

let sets = new Set();//建立一個空的SET                              Set {}
let sets1 = new Set([1,2,3,4]);//可以傳入陣列-陣列轉set     Set { 1, 2, 3, 4 }
let sets2 = new Set([1,2,2,4]);//重複資料不會新增到set中  Set { 1, 2, 4 }

可以利用建構函式可以傳入陣列的特性,用來給陣列去重。即第三種示例。
TODO:但這裡沒有考慮效能問題,比如較大的陣列用這種方式去重會有什麼結果。

2.2 set 加入或刪除key操作

Set 提供了add 和delete方法

sets.add(1,2,5);//Set { 1 }    只能加入第一個
sets.add(5);//Set { 1, 5 }      加入一個key(5)
sets.add(5);//Set { 1, 5 }      重複加入無效
sets.delete(1);//Set { 5 }      刪除一個key(5)
sets.delete(1);//Set { 5 }      重複刪除無效

2.3 set轉陣列

let array = Array.from(sets1);//[ 1, 2, 3, 4 ] 使用Array 提供的from方法
msgId = Array.
from(new Set(msgId));//陣列去重