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

資訊專欄INFORMATION COLUMN

es6-Set與Map

big_cat / 919人閱讀

摘要:由于和不會(huì)被轉(zhuǎn)換為字符串,所以在內(nèi)部是不同的項(xiàng),如果他們被轉(zhuǎn)化為字符串,那么都會(huì)等于,如果多次調(diào)用并傳入相同的值作為參數(shù)。第二次重復(fù)傳入并不會(huì)被添加到集合中,那么的屬性值還是為。的方法和共享了幾個(gè)方法。小結(jié)正式將與引入。

se5中的set與map

在est5中開(kāi)發(fā)者使用對(duì)象屬性來(lái)模擬。set多用于檢查鍵的存在,map多用于提取數(shù)據(jù)。

{
    let set = Object.create(null)
    set.foo = true;
    //檢查屬性是否存在
    if (set.foo) {
        //其他操作
    }

    let map = Object.create(null);
    map.foo = "一個(gè)值";
    let val = map.foo;

    console.log("map-->:", val); //map-->:一個(gè)值"
}

在簡(jiǎn)單情況下將對(duì)象作為map和set來(lái)使用都是可行的,但是一旦接觸到對(duì)象屬性的局限性,此方式就會(huì)遇到更多的麻煩。

{
    let map1 = Object.create(null),
        key1 = {},
        key2 = {};

    map1[key1] = "foo";
    console.log("key2-->:", map1[key2]);

    let map2 = Object.create(null);
    map2.count = 1;
    //是想檢查count的存在,還是非零值?
    if (map2.count) {
        //...
    }
}

map1[key1]和map1[key2]引用了同一個(gè)值。由于對(duì)象屬性只能是string,又因?yàn)閷?duì)象默認(rèn)的string表達(dá)形式是"[object object]"。導(dǎo)致key1和key2被轉(zhuǎn)換為同一個(gè)字符串。map2中count的用法存在歧義。該if語(yǔ)句內(nèi)的代碼都會(huì)被執(zhí)行因?yàn)?被隱式轉(zhuǎn)換為true。然而count的值為0則會(huì)被隱式轉(zhuǎn)為false。在大型應(yīng)用中這類問(wèn)題都是難以確認(rèn),難以調(diào)試的。這也是新增set和map類型的原因。set類型是一種無(wú)重復(fù)值的有序列表。set允許對(duì)它包含的數(shù)進(jìn)行快速訪問(wèn),從而更有效的追蹤各種離散值。

創(chuàng)建set類型

使用new set()來(lái)創(chuàng)建。調(diào)用add()方法向集合中添加元素,訪問(wèn)集合的size屬性獲取集合數(shù)量。

{
    let set = new Set();

    set.add(5);
    set.add("5");
    console.log("typeof set-->:", typeof set)
    console.log("set-->:", set)
    console.log("size-->:", set.size)
}

set不會(huì)使用強(qiáng)制類型轉(zhuǎn)換來(lái)判斷值是否重復(fù),這意味著set可以同時(shí)包含number(5)和string(5),唯一的例外-0和+0在set中被判定是相等的,如果向set集合中添加多個(gè)對(duì)象,則他們之間彼此獨(dú)立。

{
    let set = new Set();
    let key1 = {};
    let key2 = {};

    set.add(key1);
    set.add(key2);
    console.log("typeof setobject-->:", typeof set)
    console.log("setobject-->:", set)
    console.log("size-->:", set.size)
}

由于key1和key2不會(huì)被轉(zhuǎn)換為字符串,所以在set內(nèi)部是不同的項(xiàng),如果他們被轉(zhuǎn)化為字符串,那么都會(huì)等于"[object object]",如果多次調(diào)用add()并傳入相同的值作為參數(shù)。那么后續(xù)的調(diào)用會(huì)被忽略。

{
    let set = new Set();

    set.add(5);
    set.add("5");
    set.add(5);
    console.log("typeof set-->:", typeof set)
    console.log("set-->:", set)
    console.log("size-->:", set.size)
}

第二次重復(fù)傳入numner(5)并不會(huì)被添加到set集合中,那么size的屬性值還是為2。也可以使用數(shù)組來(lái)初始化set集合。集合同樣會(huì)過(guò)濾重復(fù)的值。

{
    let set = new Set([1, 2, 3, 4, 5, 5, 5, 5, 5, 5]);
    console.log("size-->:", set.size);
}

通過(guò)has()可以檢測(cè)set集合中是否存在某個(gè)值。

{
    let set = new Set();

    set.add(5);
    set.add("6");
    console.log("set has-->:", set.has(6));
    console.log("set has-->:", set.has("6"))
    console.log("set has-->:", set.has(5))
    console.log("set has-->:", set.has("5"))
}

set集合中相同的number和sting并不會(huì)返回true。調(diào)用delete()方法可以移除set中的某一個(gè)值,調(diào)用clear()方法可以移除所有值。

{
    let set = new Set();

    set.add(5);
    set.add("6");
    console.log("set has-->:", set.has("6"));
    set.delete("6")
    console.log("set has-->:", set.has("6"))
    console.log("size-->:", set.size)
    set.clear();
    console.log("size-->:", set.size)
}

set集合簡(jiǎn)單易用,可以有效的跟蹤多個(gè)獨(dú)立有序的值。

set的forEach

set集合和數(shù)組的forEach類似,運(yùn)行機(jī)制也比較類似。forEach()方法的回調(diào)接收3個(gè)參數(shù):
1.集合中索引的位置。
2.被遍歷參數(shù)的值
3.集合本身

{
    let set = new Set(["a", "b", "c", "d", "e"]);
    set.forEach((k, val, owner) => {
        console.log("set-forEach-k-->:", k);
        console.log("set-forEach-val-->:", val);
        console.log("set-forEach-owner-->:", owner);
    })
}
將set轉(zhuǎn)換為數(shù)組

將數(shù)組轉(zhuǎn)換為set集合的過(guò)程很簡(jiǎn)單,需要給set集合傳入數(shù)組即可。將集合轉(zhuǎn)回?cái)?shù)組,只需要使用展開(kāi)運(yùn)算符即可。

{
    let arr = [1, 2, 3, 4, 5, 5, 5, 5, 5, 5];
    let set = new Set(arr);
    let newArr = [...set];
    //ps: 代碼行數(shù)太多可以壓縮下
    let newArr2 = [...new Set([1, 2, 3, 4, 5, 5, 5, 5, 5, 5])];
    console.log(newArr, newArr2)
}
創(chuàng)建map類型

map類型是鍵值對(duì)的有序列表,鍵和值都可以是任意類型,可以調(diào)用set()方法傳遞一個(gè)鍵和一個(gè)關(guān)聯(lián)的值,來(lái)給馬屁添加項(xiàng);此后使用鍵名來(lái)調(diào)用get()方法獲取對(duì)應(yīng)的值。

{
    let map = new Map();
    map.set("title", "es6");
    map.set("year", 2016);

    console.log("map-title-->", map.get("title"))
    console.log("map-year-->", map.get("year"))
}
map的方法

map和set共享了幾個(gè)方法。以下的方法和屬性map和set上都存在:
1.forEach(val, k, owner): 遍歷map
2.has(key):判斷指定的鍵值是否存在
3.delete(key):移除map中鍵以及對(duì)應(yīng)的值
4.clear():移除map中所有的鍵和值
5.size:指明包含多個(gè)鍵值對(duì)。

{
    let map = new Map();
    map.set("title", "es6");
    map.set("year", 2016);

    map.forEach((val, k, owner) => {
        console.log("map-forEach-k-->:", k);
        console.log("map-forEach-val-->:", val);
        console.log("map-forEach-owner-->:", owner);
    })
    console.log("map-size-->:", map.size);

    console.log("map-has-->:", map.has("title"));

    map.delete("title");
    console.log("map-->:", map);

    map.clear();
    console.log("map-->:", map);
}
小結(jié)

es6正式將set與map引入。在此之前往往使用對(duì)象來(lái)模擬,但是由于與對(duì)象屬性有關(guān)的限制,這么做會(huì)經(jīng)常遇到問(wèn)題。
這里并沒(méi)有弱引用weakset和weakmap,有這方面需要的可以自己去查閱

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/95329.html

相關(guān)文章

  • 20190727-前端筆記-Map結(jié)構(gòu)

    摘要:將對(duì)象當(dāng)做的一個(gè)鍵獲取鍵為的值刪除鍵為的鍵值對(duì)判斷是否包含鍵值對(duì)但是我在看阮一峰的的時(shí)候,看到一些針對(duì)自己的問(wèn)題,不太好理解。 在JS的對(duì)象(Object)中,本質(zhì)是就是鍵值對(duì)的集合(HASH) { name:Kisn, Brith:941018 } 但是在實(shí)際情況使用中,我們不能很好地使用它,它也會(huì)導(dǎo)致很多意外。特別是,我想要一個(gè)動(dòng)態(tài)的鍵時(shí). const data = {}; con...

    everfly 評(píng)論0 收藏0
  • es6 Map和WeakMap

    摘要:事實(shí)上,不僅僅是數(shù)組,任何具有接口且每個(gè)成員都是一個(gè)雙元素的數(shù)組的數(shù)據(jù)結(jié)構(gòu)都可以當(dāng)做構(gòu)造函數(shù)的參數(shù)。返回所有成員的遍歷器需要特別注意的是,的遍歷順序就是插入順序。轉(zhuǎn)為轉(zhuǎn)為,正常情況下,所有鍵名都是字符串。 Map JavaScript 的對(duì)象(Object),本質(zhì)上是鍵值對(duì)的集合(Hash 結(jié)構(gòu)),但是傳統(tǒng)上只能用字符串當(dāng)作鍵。這給它的使用帶來(lái)了很大的限制。為了解決這個(gè)問(wèn)題,ES6 提...

    sPeng 評(píng)論0 收藏0
  • es6 Map和set

    摘要:返回一個(gè)布爾值,表示該值是否為的成員。清除所有成員,沒(méi)有返回值。該數(shù)組中的每一項(xiàng)也必須是數(shù)組,內(nèi)部數(shù)組的首個(gè)項(xiàng)會(huì)作為鍵,第二項(xiàng)則為對(duì)應(yīng)值。返回所有成員的遍歷器需要特別注意的是,的遍歷順序就是插入順序。 Js大部分歷史時(shí)期都只存在一種集合類型,也就是數(shù)組類型。數(shù)組在 JS 中的使用正如其他語(yǔ)言的數(shù)組一樣,但缺少更多類型的集合導(dǎo)致數(shù)組也經(jīng)常被當(dāng)作隊(duì)列與棧來(lái)使用。數(shù)組只使用了數(shù)值型的索引,而...

    superPershing 評(píng)論0 收藏0
  • ES6系列---Set集合Map集合

    摘要:中模擬與長(zhǎng)久以來(lái),數(shù)組一直是中唯一的集合類型。用數(shù)組初始化集合事實(shí)上,只要是可迭代對(duì)象數(shù)組集合集合,都可以作為構(gòu)造函數(shù)的參數(shù)。構(gòu)造函數(shù)通過(guò)迭代器從參數(shù)中提取值。 ES5中模擬Set與Map 長(zhǎng)久以來(lái),數(shù)組一直是JavaScript中唯一的集合類型。如果開(kāi)發(fā)者們需要使用非數(shù)值型索引,就會(huì)用非數(shù)組對(duì)象創(chuàng)建所需的數(shù)據(jù)結(jié)構(gòu),而這就是Set集合與Map集合的早期實(shí)現(xiàn)。 一般來(lái)說(shuō),Set集合常被用...

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

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

0條評(píng)論

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