es6中提供了兩新資料結構-set和weakset。set是類似於陣列,但是成員變數的值都是唯一的,沒有重複的值。weakset也是不重複的值的集合,但是只能用來存放物件。
一、set使用
(1)set本身提供了乙個建構函式,用來生成set資料結構。
var s = new set();
[2,2,2,5,8,16,2,1].map(x => s.add(x))
for(i of s)
//2,5,8,16,1
(2)set()函式可以接受乙個陣列,作為構造引數,用於做初始化。
var s = new set([1,2,3,4,2,4,3]);
[...s]
//[1,2,3,4]
注意:向set中加入值的時候不會發生型別轉換,所以5和」5」是兩個不同的值,set內部判斷兩個值是否相等,使用的是 ===,這就意味著這兩個物件總是不相等。唯一列外的是nan本身(精確相等運算子認為nan不等於自身)
let set = new set();
set.add({})
set.size//1
set.add({})
set.size//2
則,上面的**表示,由於這兩個空物件不是精確相等,所以是兩個不同的值。
(3)set的方法和屬性
(3.1)set的屬性
set.prototype.size:返回set例項的成員數量。
set.prototype.constructor:預設的構造set函式。
(3.2)set的操作啊函式
add(value):新增某個值,返回set結構本身。
delete(value):刪除某個值,返回乙個布林值,表示刪除成功。
has(value):返回乙個布林值,表示引數是否為set的成員。
clear():清除所有成員,沒有返回值。
var set = new set();
set.add(1).add(2).add(22).add(22);
set.size//3
set.hae(22)//true
set.has(4)//false
set.delete(2)//true
(3.3)set遍歷操作
set有四個遍歷方法。可以用於遍歷成員。
keys() :返回乙個鍵名的遍歷器
values() :返回乙個值的遍歷器
entries() :返回乙個鍵值對的遍歷器
foreach():使用**函式遍歷每個成員
注意:由於set沒有鍵名,只有值名,keys()和values()返回的結果是一樣,
let set = new set(['red','green','blue']);
for(let item of set.keys())
//red,green,blue
for(let item of set.values())
//red,green,blue
for(let item of set.entries())
//["red","red"]
//["green","green"www.cppcns.com]
//["blue","blue"]
//所以,entries方法返回的遍歷器同時包括鍵名和值,所以每次輸出的是乙個陣列。其實成員都是完全一樣的。
注意:set預設的可遍歷,其預設遍歷器生成函式就是它的values方法。
這就意味著,可以省略values方法,直接用for…of遍歷。
var set = new set([1,2,3,4]);
for(let x of set)
//1//2
//3//4
如果使用擴充套件運算子(…)內部使用for…of 迴圈,所以也可以用於set結構。
let set = new set(['red','green','blue']);
let arr = [...set];
//['red','green','blue'];
(3.4)set實現並集,交集,差集
let set1 = new set([1,2,3,4,5,6]);
let set2 = new set([4,5,6,7,8,9]);
//並集
let union = new set([...set1,...set2]);
//[1,2,3,4,5,6,7,8,9]
//交集
let intersect = new set([...set1].filter(x => b.has(s)));
//[4,5,6]
//差集
let intersect = new set([...set1].filter(x => !b.has(s)));
//[1,2,3,4]
(3.5)set實現foreach的使用
let set = new set([1,2,3,4,5,6]);
set.foreach(value,key)=www.cppcns.com>consloe.log(vlaue+1);
//2//3
//4//5
//6//7
注意:foreach方法的引數就是乙個處理函式,該函式依次為(鍵值,鍵名)集合本身。另外,foreach方法還有第二個引數,表示繫結this的物件程式設計客棧。
二、weakset使用
weakset類似於set,也是不重複的值的集合。但是它只能用於儲存物件。而不能是其他型別的值。
weakset是乙個個建構函式。可以接受陣列和類似陣列的物件作為引數。(實際上,任何具作為iterable介面的物件都可以作為weaksetwww.cppcns.com的引數)。該陣列的所有成員都會自動成為weakset的例項物件的成員。
var a = new [[1,2www.cppcns.com],[3,4]];
var ws = new weakset(a);
var ws = new weakset();
ws.add(1);//typeerror:invalid value used in weak set
ws.add(symbol);//typeerror:invalid value used in weak set
添如乙個數值和乙個symbol,結果同時報錯。
weakset結構有以下的上方法
weakset.protoptype.add(value):向weakset例項新增乙個新成員。
weakset.protoptype.delete(value):刪除weakset例項指定成員。
weakset.protoptype.has(value):返回乙個布林值,表示某個值是否在weakset例項中。
var ws = new weakset();
var obj = {};
var foo = {};
ws.add(window);
ws.add(obj);
ws.has(window);//true
ws.has(foo);false
ws.delete(window);//true
ws.has(window);//false
weakset 不能遍歷,是因為成員都是弱引用,隨時可能消失,遍歷不能保證成員的存在。可能剛剛遍歷結束,成員就取不到了。weakset的乙個用處是儲存dom節點,而不用擔心這些節點從文件移除時,會引起記憶體的洩露。
本文標題: es6中如何使用set和weakset
本文位址:
ES6中Set()的使用 javaScript
記錄一波今天在專案中實踐使用es6中的set 的資料結構,感覺特別帥氣!set 可以實現在返回的一串資料的陣列中挑選出滿足你條件的資料。最大的關注點就是 去重!使用場景 後台返回乙個陣列 所有場景的 裡面包含了全景圖與非全景圖 字段下面根據imagetype 來區分,貨架分為主貨架與非主貨架 而全景...
es6中set的屬性 方法和使用
set 資料結構 類似陣列 成員資訊唯一性 新增1 add var s new set s.add ggg add 5555 console.log s set 新增2 陣列 var s2 new set rrr 123,rfggb console.log s2 set 刪除 delete 返回值 ...
es6中 使用class裡面的set和get 用法
在一些專案中,如果乙個字段,後端只返回0或1的時候,但是你業務邏輯中要將0和1對應轉換成true或者false的時候,如果直接轉的話,儲存的時候轉後端又要寫一次,非常麻煩。export class person public getactivetoboolean boolean public set...