成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ES6學(xué)習(xí)之 -- Set數(shù)據(jù)結(jié)構(gòu)

wawor4827 / 2778人閱讀

摘要:類似于數(shù)組,但是中不存在重復(fù)元素??梢越邮芤粋€(gè)數(shù)組或者其他具有接口的數(shù)據(jù)結(jié)構(gòu)作為參數(shù)從上面的代碼可以看出有去重的功能。去重還有另一個(gè)方法將數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)轉(zhuǎn)換成數(shù)組。清除實(shí)例的指定成員。返回一個(gè)布爾值,表示某個(gè)值是否在實(shí)例之中。

Set

Set類似于數(shù)組,但是Set中不存在重復(fù)元素。
Set可以接受一個(gè)數(shù)組(或者其他具有itarable接口的數(shù)據(jù)結(jié)構(gòu))作為參數(shù)

const set = new Set([1,1,2,3,4,5,4,5]);
console.log([...set]);//[1, 2, 3, 4, 5]

從上面的代碼可以看出Set有去重的功能。[...new Set(arr)]
去重還有另一個(gè)方法,Array.from將Set數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)轉(zhuǎn)換成數(shù)組。

function removelArr(arr) {
    return Array.from(new Set(arr));
}
removelArr([1, 1, 2, 3, 2, "1"]);//[1, 2, 3, "1"]
或者
[...new Set([1, 1, 2, 3, 2, "1"])];//[1, 2, 3, "1"]

Set加入值的時(shí)候不會(huì)發(fā)生類型轉(zhuǎn)變

const set = new Set([1,"1"]);
console.log([...set]);//[1, "1"]

Set內(nèi)部判斷兩個(gè)值是否相同使用了Object.is(a, b)方法,這個(gè)方法與嚴(yán)格等于的不同之處在于NaN,Object.is(NaN, NaN)返回的是true。

let a = NaN;
let b = NaN;
let set = new Set();
set.add(a);
set.add(a);
console.log([...set]);//[NaN]

捎帶提一下兩個(gè)對(duì)象的總是不相等的,這就不用多說了吧,內(nèi)存地址不同。。。

let obj1 = {};
let obj2 = {};
let set = new Set();
set.add(obj1);
set.add(obj2);
console.log([...set]);//[{}, {}]

Set的屬性

size:獲取成員個(gè)數(shù)

Set的方法

add(value):增加一個(gè)成員,返回值為set結(jié)構(gòu)本身

delete(value):刪除某個(gè)成員,返回值是一個(gè)布爾值,是否刪除成功

clear():清空所有成員,無返回值

has(value):判斷是否有某個(gè)成員,返回一個(gè)布爾值,是否存在某個(gè)元素

let set = new Set();
set.add(1).add(2).add(2).add("1");
set.size;//3
set.delete("1");//true
set.size;//2
set.has(2);//true
set.clear();
set.size;//0

Set的遍歷操作

keys():返回鍵名的遍歷器

let set = new Set([1, 1, 2, 3, 2, "1"]);
//因?yàn)閗eys返回的是遍歷器,所以可以使用`for...of`,數(shù)組沒有鍵名只有鍵值,所以keys和values返回的是一致的
for(let item of set.keys()){
    console.log(item);// 1 2 3 "1"
}

values():返回值名的遍歷器

let set = new Set([1, 1, 2, 3, 2, "1"]);
//因?yàn)関alues返回的是遍歷器,所以可以使用`for...of`
for(let item of set.values()){
    console.log(item);// 1 2 3 "1"
}

entries():返回鍵值對(duì)的遍歷器

//entries方法返回的遍歷器,同時(shí)包括鍵名和鍵值
let set = new Set([1, 1, 2, 3, 2, "1"]);
//因?yàn)関alues返回的是遍歷器,所以可以使用`for...of`
for(let item of set.entries()){
    console.log(item);// [1, 1] [2, 2] [3, 3] ["1", "1"]
}

forEach():使用回調(diào)函數(shù)遍歷每個(gè)成員

let set = new Set([1, 4, 9]);
set.forEach((value, key) => console.log(key + " : " + value))
// 1 : 1
// 4 : 4
// 9 : 9

Set 結(jié)構(gòu)的實(shí)例默認(rèn)可遍歷,它的默認(rèn)遍歷器生成函數(shù)就是它的values方法。

Set.prototype[Symbol.iterator] === Set.prototype.values
//true

這意味著我們可以直接遍歷Set

let set = new Set([1, 4, 9]);
for(let item of set) {
    console.log(item);//1 4 9
}
WeakSet

注意點(diǎn):

WeakSet的成員只能是對(duì)象

WeakSet的成員是弱引用,隨時(shí)都可能消失,所以無法遍歷也就無法獲取成員數(shù)量

WeakSet的方法

add(value)向 WeakSet 實(shí)例添加一個(gè)新成員。

delete(value)清除 WeakSet 實(shí)例的指定成員。

has(value)返回一個(gè)布爾值,表示某個(gè)值是否在 WeakSet 實(shí)例之中。

WeakSet 的一個(gè)用處,是儲(chǔ)存 DOM 節(jié)點(diǎn),而不用擔(dān)心這些節(jié)點(diǎn)從文檔移除時(shí),會(huì)引發(fā)內(nèi)存泄漏。

下面是 WeakSet 的另一個(gè)例子。

const foos = new WeakSet()
class Foo {
  constructor() {
    foos.add(this)
  }
  method () {
    if (!foos.has(this)) {
      throw new TypeError("Foo.prototype.method 只能在Foo的實(shí)例上調(diào)用!");
    }
  }
}

method只能通過Foo的實(shí)例調(diào)用不然就會(huì)拋出異常,當(dāng)刪除實(shí)例的時(shí)候,不用操作foos也不會(huì)引發(fā)內(nèi)存泄露

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/90592.html

相關(guān)文章

  • es6學(xué)習(xí)之map和set

    摘要:和定義一組鍵值對(duì)的集合它是一組鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),由于之前的鍵必須是字符串。 Map和Set Map 定義:一組鍵值對(duì)的集合 它是一組鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),由于之前javascript的鍵(key)必須是字符串。為了使鍵可以是多種類型的于是在最新的es6中引入了map這種數(shù)據(jù)結(jié)構(gòu),這樣可以加快查詢速度,類似于查字典 方法和屬性 var m = map() //空map m.set(學(xué)生年齡,...

    lvzishen 評(píng)論0 收藏0
  • ES6學(xué)習(xí)之 -- 解構(gòu)(使數(shù)據(jù)訪問更便捷)

    摘要:數(shù)組的解構(gòu)賦值規(guī)定允許按照一定模式,從數(shù)組和對(duì)象中提取值對(duì)變量進(jìn)行賦值,我們稱之為解構(gòu)。的規(guī)則是,只要有可能導(dǎo)致解構(gòu)的歧義,就不得使用圓括號(hào)。 數(shù)組的解構(gòu)賦值 ES6規(guī)定:允許按照一定模式,從數(shù)組和對(duì)象中提取值對(duì)變量進(jìn)行賦值,我們稱之為解構(gòu)。以前賦值只能直接指定值 let a = 1; let b = 2; let c = 3; ES6允許以下這種做法 let [a, b, c] = ...

    mrcode 評(píng)論0 收藏0
  • 【搶先領(lǐng)】《React 學(xué)習(xí)之道》我們翻譯了一本最簡(jiǎn)單,且最實(shí)用的 React 實(shí)戰(zhàn)教程……

    摘要:學(xué)習(xí)之道簡(jiǎn)體中文版通往實(shí)戰(zhàn)大師之旅掌握最簡(jiǎn)單,且最實(shí)用的教程。前言學(xué)習(xí)之道這本書使用路線圖中的精華部分用于傳授,并將其融入一個(gè)獨(dú)具吸引力的真實(shí)世界的具體代碼實(shí)現(xiàn)。完美展現(xiàn)了的優(yōu)雅。膜拜的學(xué)習(xí)之道是必讀的一本書。 《React 學(xué)習(xí)之道》The Road to learn React (簡(jiǎn)體中文版) 通往 React 實(shí)戰(zhàn)大師之旅:掌握 React 最簡(jiǎn)單,且最實(shí)用的教程。 showIm...

    oneasp 評(píng)論0 收藏0
  • es6學(xué)習(xí)之let和const命令

    摘要:和命令命令是在它所在的代碼塊有效,它屬于塊級(jí)作用域,新增。只有全局作用域和函數(shù)作用域。 let和const命令 let命令是在它所在的代碼塊有效,它屬于塊級(jí)作用域,es6新增。es5只有全局作用域和函數(shù)作用域。let命令存在暫時(shí)性死區(qū)(TDZ),即在申明前使用就會(huì)報(bào)錯(cuò),不存在變量提升 console.log(a); // 報(bào)錯(cuò) let a = 111; ==let不允許在相同作用域中,...

    DrizzleX 評(píng)論0 收藏0
  • JS學(xué)習(xí)之Object

    摘要:文中的多為構(gòu)造函數(shù)原型對(duì)象屬性為函數(shù)的專屬屬性,表示函數(shù)的原型對(duì)象。關(guān)于各種數(shù)據(jù)類型的屬性的展示對(duì)象的構(gòu)造器函數(shù)該屬性指向創(chuàng)建該對(duì)象原型的構(gòu)造函數(shù)。對(duì)對(duì)象的凍結(jié)狀態(tài)的設(shè)置和判斷,前者讓凍結(jié)對(duì)象,后者判斷對(duì)象是否被凍結(jié)。 前言 上篇文章介紹了JS的對(duì)象,本文將介紹Object這個(gè)基類,主要介紹其屬性和方法(其實(shí)這些在MDN里都有^_^,點(diǎn)擊這里可以直通MDN)。好了廢話不多說了,直接開始...

    qujian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<