国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

重學ES6 Set 數據結構(1)

Caicloud / 2875人閱讀

摘要:數據結構類似于數組,但是成員的值都是唯一的,沒有重復。本身是一個構造函數,用來生成數據結構。函數接受一個數組或者具有接口的其他數據結構作為參數。遍歷的應用擴展運算符內部使用循環,所以也可以用于結構。

Set數據結構類似于數組,但是成員的值都是唯一的,沒有重復。

Set本身是一個構造函數,用來生成Set數據結構。

Set 結構不會添加重復的值。

const s = new Set();
[2,3,5,4,4,2,2].froEach(x => s.add(x));

for(let i of s) {
    console.log(i)
}
// 2 3 4 5

Set函數接受一個數組(或者具有 iterable接口的其他數據結構)作為參數。

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

// example 2
const items = new Set([1,2,3,4,5,5,5,5]);
items.size // 5

// example 3
function divs(){
    return [...document.querySelectorAll("div")]
}
const set = new Set(divs());
set.size // 60

//類似于
divs().forEach(div => set.add(div))

數組去重的方法 [...new Set(array)]

注意:向Set加入值時,不會發生類型轉換,所以 5 和 “5” 是兩個不同的值。Set內部判斷兩個值是否相同使用的算法叫做“Same-value equality”類似于“===”,主要區別在于 NaN等于自身,而 精確相等認為 NaN 不等于自身。

另外,兩個對象總是不相等的。

let set = new Set();
set.add({});
set.size // 1
set.add({})
set.size // 2
Set 實例的屬性和方法

屬性

Set.prototype.constructor: 構造函數

Set.prototype.size: Set 實例的成員總數

方法

add(value) :添加某個值,返回set結構本身

delete(value) :刪除某個值,返回布爾值,表示是否成功

has(value):返回布爾值,表示參數是否為Set成員

clear(value):清除所有成員,沒有返回值。

// 對象寫法
const properties = {
    "width" : 1,
    "height": 1
}

if(properties[someName]){
    // do something
}

//Set 寫法
const properties = new Set();
properties.add("width");
properties.add("height");

if(properties.has(someName){
    // do something
}

Array.from方法將Set轉化為數組。

const items = new Set([1,2,3,4,5]);
const array = Array.from(items);

// 去除數組重復元素的方法
function dedupe(array){
    return Array.from(new Set(array))
}

dedupe([1,2,3,3,2]); // [1,2,3]

遍歷操作

keys()

values()

entries()

forEach()

特別指出:Set遍歷順序就是插入順序。比如可以使用Set保存一個回調函數列表,調用時,就可以按照添加順序來調用。

keys,values,entries 方法都是返回遍歷器對象。由于Set沒有鍵名,只有鍵值,(或者說是 鍵名和鍵值是一樣的),所以,keys和values方法的行為完全一致。

let set = new Set(["red","green","blue"]);
for(let item of set.keys()){
    console.log(item)
}
// red
// green
// blue

let set = new Set(["red","green","blue"]);
for(let item of set.values()){
    console.log(item)
}
// red
// green
// blue

let set = new Set(["red","green","blue"]);
for(let item of set.entries()){
    console.log(item)
}
// ["red","red"]
// ["green","green"]
// ["blue","blue"]

可以直接用 for ... of 循環遍歷Set。

forEach()

set 結構的 forEach 對于每個成員執行操作,沒有返回值。

let set = new Set([1,2,3])
set.forEach((value,key) => console.log(value * 2))

遍歷的應用

擴展運算符(...)內部使用 for of 循環,所以也可以用于Set結構。

let set = new Set(["red","green","blue"])
let arr = [...set]
//["red","green","blue"]

擴展運算符(...)結合set,就可以進行數組去重

let arr = [1,2,3,2,5,3,4,5]
let unique = [... new Set(arr)]
// [1,2,3,4,5]

map和filter 也可以用于 Set

let set = new Set([1,2,3])
set = new Set([...set].map(x => x*2))
// set {2,4,6}
let set = new Set([1,2,3,4,5])
set = new Set([...set].filter(x => (x%2) == 0))

使用Set結構,很容易實現 并集,交集,差集

let a = new Set([1,2,3])
let b = new Set([4,3,2])
//并集
let union = new Set([...a,...b])
//交集
let intersect = new Set([...a].filter(x => b.has(x)))
//差集
let difference = new Set([...a].filter(x => !b.has(x)))

如果想在遍歷操作中,同步改變原來的Set結構,沒有直接的辦法。只能變通一下,一種是利用原來的Set結構映射一個新的結構,然后賦值給原來的Set結構,另一種就是Array.from

//1
let set = new Set([1,2,3])
set = new Set([...set].map(val => val*2)

//2
let set = new Set([1,2,3])
set = new Set(Array.from(set,val => val*2))

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/6867.html

相關文章

  • 重學前端學習筆記(九)--JavaScript中的對象分類

    摘要:固有對象由標準規定,隨著運行時創建而自動創建的對象實例。普通對象由語法構造器或者關鍵字定義類創建的對象,它能夠被原型繼承。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學習【原文有winter的語音】,如有侵權請聯系我,郵箱:ka...

    ShowerSun 評論0 收藏0
  • 重學前端學習筆記(九)--JavaScript中的對象分類

    摘要:固有對象由標準規定,隨著運行時創建而自動創建的對象實例。普通對象由語法構造器或者關鍵字定義類創建的對象,它能夠被原型繼承。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學習【原文有winter的語音】,如有侵權請聯系我,郵箱:ka...

    tinna 評論0 收藏0
  • 重學前端學習筆記(九)--JavaScript中的對象分類

    摘要:固有對象由標準規定,隨著運行時創建而自動創建的對象實例。普通對象由語法構造器或者關鍵字定義類創建的對象,它能夠被原型繼承。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學習【原文有winter的語音】,如有侵權請聯系我,郵箱:ka...

    dantezhao 評論0 收藏0
  • 重學前端學習筆記(六)--JavaScript類型有哪些你不知道的細節?

    摘要:的碼點被稱為基本字符區域。關于的介紹,我準備用文檔阮一峰來做一些介紹,具體的可以參考文檔引入的原因的對象屬性名都是字符串,這容易造成屬性名的沖突。其他的一些屬性可以去看文檔阮一峰注意函數前不能使用命令,否則會報錯。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完...

    Lsnsh 評論0 收藏0

發表評論

0條評論

Caicloud

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<